首页 > 解决方案 > 以编程方式实现 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 文件中的发射器留下的轨迹 - 我希望发射器在移动时看起来像这样

有没有不同的方法将发射器连接到子弹上,以便它在移动时出现在第二张图像中?

谢谢。

标签: iosswiftsprite-kit

解决方案


由于子弹是SKSpriteNode继承自 的SKNode,因此您可以将发射器作为子项添加到子弹中,这不仅可以获得您正在寻找的尾随效果,还可以让您不必为发射器提供一个动作序列匹配子弹。它只会沿着您为子弹设置的轨迹移动。

(如果您确实修改了发射器的位置以调整所需的效果,请记住它现在位于其父级子弹的坐标系中,而不是场景本身。)

bullet.addChild(emitter)


推荐阅读