以编程方式实现SKEmitterNode的“拖延”效果(快速)

时间:2018-10-07 09:36:42

标签: ios swift sprite-kit

我有一个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文件中,我可以拖动鼠标,发射器将在其来源处留下“尾迹”。看到这两张图片:

Emitter while stationary - this is how the emitter looks like when it is moving with the bullet

上方: 发射器处于静止状态-这是发射器随子弹移动的样子

Trail left by 'dragging' the emitter - I would like the emitter to look like this while moving

上方: 通过物理方式“拖动” .sks文件中的发射器而向左移动-我希望发射器在移动时看起来像这样

是否有其他方法可以将发射器附着到子弹上,从而使其在移动时如第二张图像所示?

谢谢。

1 个答案:

答案 0 :(得分:1)

由于子弹是从SKSpriteNode继承的SKNode,因此您可以将发射器作为子代添加到子弹中,这不仅会为您提供所需的尾随效果,而且还可以省去必须给发射器一个动作序列以匹配子弹的麻烦。它只会沿着您为子弹设定的相同轨迹移动。

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

bullet.addChild(emitter)