SKAction仅更新上次实例化的精灵

时间:2016-04-13 00:02:16

标签: swift sprite-kit swift2 skaction skemitternode

在从背部手术中收回时教自己spritekit。非常感谢您提供的任何帮助或指导。

我有一个功能,可以添加一个"怪物"带有孩子SKEmitter的精灵。我想将此发射器更新为"打开"并且"关闭" SKEmitter。只要屏幕上只有一个精灵就可以运行。从该功能创建第二个节点的那一刻,第一个节点停止打开和关闭。

在我看来,SKAction仅在最新节点上运行。我无法告诉我如何解决这个问题。

我在UI中看到的示例。 SKEmitter On and Off

我的代码:

    flameThrowerSplash = SKEmitterNode(fileNamed: "flamesThrowerSplash.sks")!
    let newX = flameThrowerSplash.position.x - 475
    let newY = flameThrowerSplash.position.y + (zombie1.size.height * 0.7)
    let newLocation = CGPointMake(newX, newY)

    flameThrowerSplash.position = newLocation
    flameThrowerSplash.targetNode = currentScene

    let wait = SKAction.waitForDuration(0.5)
    let pauseEmitter = SKAction.runBlock({self.flameThrowerSplash.particleBirthRate = 0})
    let startEmitter = SKAction.runBlock({ self.flameThrowerSplash.particleBirthRate = 455})
    let wait2 = SKAction.waitForDuration(0.5)
    let run = SKAction.sequence([wait, startEmitter,wait2, pauseEmitter])

    zombie1.runAction(SKAction.repeatActionForever(run))

1 个答案:

答案 0 :(得分:2)

看起来你并不希望flameThrowerSplash成为一个场景属性。

而不是

flameThrowerSplash = SKEmitterNode(fileNamed: "flamesThrowerSplash.sks")!

将其声明为新变量

let flameThrowerSplash = SKEmitterNode(fileNamed: "flamesThrowerSplash.sks")

然后你可以独立地将它添加到每个僵尸。

你为每个新的僵尸重新分配它......这就是它消失的原因。