如何在粒子效果后从屏幕中删除精灵节点

时间:2015-07-07 18:39:27

标签: swift sprite-kit skspritenode skemitternode sktransition

func collisionHappened() {
    let explosion = SKEmitterNode(fileNamed: "rocketExplosion")
    rocket.addChild(explosion)
    let sceneChange = gameOverScene(size: self.size)
    sceneChange.scaleMode = scaleMode
    let reveal = SKTransition.crossFadeWithDuration(3)
    self.view?.presentScene(sceneChange, transition: reveal)
    reveal.pausesOutgoingScene = false
}

我已经将粒子效果附加到我想要在碰撞发生时“爆炸”的节点,从而结束游戏。然后我希望场景改变为场景中的游戏。如果传出的场景暂停,那么粒子效果不会发生,但现在我将其设置为不暂停,碰撞不断发生,并且场景中的游戏永远不会出现,因为游戏会继续回到传出的场景。为了克服这一点,我想我可以补充: rocket.removeFromParent()以便不再发生碰撞,但这意味着粒子效应不会发生。是否有任何方法可以使粒子效应发生,然后火箭被移除,以便我可以同时拥有它们? 我希望这是有道理的!

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,您可以将粒子效果添加为SKScene子类的子项而不是rocket的子项。因此,当您移除火箭时,粒子效果也不会被移除。只需确保将SKEmitter的位置设置为rocket的位置,即让粒子出现在正确的位置。例如:

func collisionHappened() {
    let explosion = SKEmitterNode(fileNamed: "rocketExplosion")
    explosion.position = rocket.position
    // I'm assuming 'self' is your SKScene subclass.
    self.addChild(explosion)

    let sceneChange = gameOverScene(size: self.size)
    sceneChange.scaleMode = scaleMode
    let reveal = SKTransition.crossFadeWithDuration(3)
    self.view?.presentScene(sceneChange, transition: reveal)
    reveal.pausesOutgoingScene = false
}