ios - 以编程方式实现 SKEmitterNode 的“拖动”效果 (Swift)
问题描述
我有一个 SKEmitterNode 用于在我的游戏中显示弹丸。发射器遵循子弹的轨迹,这是通过以下代码实现的:
let bullet = SKSpriteNode(imageNamed: "bullet") // "bullet" is a blank png
// ...Bullet properties...
self.addChild(bullet)
var actionArray = [SKAction]()
actionArray.append(SKAction.move(to: endPoint, duration: 1))
actionArray.append(SKAction.removeFromParent())
bullet.run(SKAction.sequence(actionArray))
let emitter = SKEmitterNode(fileNamed: "bulletEmitter.sks")
// ...Emitter node properties... (same position as bullet)
self.addChild(emitter!)
var emitterActionArray = [SKAction]()
emitterActionArray.append(SKAction.move(to: endPoint, duration: 1))
emitterActionArray.append(SKAction.removeFromParent())
emitter!.run(SKAction.sequence(emitterActionArray))
如上所述,发射器跟随子弹并在其移动时进行动画处理。但是,它的动画不受其速度的影响。在bulletEmitter.sks
文件中,我可以拖动鼠标,发射器会从它的来源处留下一条“轨迹”。看这两张图片:
上图:静止时发射器 - 这是发射器与子弹一起移动时的样子
上图:物理“拖动”.sks 文件中的发射器留下的轨迹 - 我希望发射器在移动时看起来像这样
有没有不同的方法将发射器连接到子弹上,以便它在移动时出现在第二张图像中?
谢谢。
解决方案
由于子弹是SKSpriteNode
继承自 的SKNode
,因此您可以将发射器作为子项添加到子弹中,这不仅可以获得您正在寻找的尾随效果,还可以让您不必为发射器提供一个动作序列匹配子弹。它只会沿着您为子弹设置的轨迹移动。
(如果您确实修改了发射器的位置以调整所需的效果,请记住它现在位于其父级子弹的坐标系中,而不是场景本身。)
bullet.addChild(emitter)
推荐阅读
- c# - 控制器文件不会出现在项目中
- javascript - 错误:警告:setState(...):在现有状态转换期间无法更新(例如在 `render` 或另一个组件的构造函数中)
- sql - PLS-00642:SQL 语句中不允许本地集合类型。我正在使用 oracle datadase 12c
- r - 如何读取未知编码(FDF)的文件
- node.js - 如何在打字稿中获得与 Express 的 Post 方法相同的数据类型
- angular - 如何解决 Angular 中的 HTTPErrosResponse 问题
- android - 从其他 PC 编译时,Google Fit 应用程序无法正常工作
- sql - 如何在 Oracle 查询中从 XML 字段中选择值
- c++ - boost加月的行为原理是什么?
- selenium - Selenium 和非无头浏览器不断要求验证码