swift - 粒子效果后如何从屏幕上删除 Sprite 节点

标签 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() 以便不再发生碰撞,但这意味着粒子效果不会发生。有什么方法可以让粒子效应发生,然后火箭被移除,这样我就可以两者兼得? 我希望这是有道理的!

最佳答案

如果我正确理解您的问题,您可以将粒子效果添加为 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
}

关于swift - 粒子效果后如何从屏幕上删除 Sprite 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31276744/

相关文章:

ios - 从内存中释放图像, swift

ios - SpriteKit 中的 Sprite 动画文件大小

swift - 检测 SKSpriteNode 是否在底部离开屏幕并调用函数

ios - 玩家坠落时 Spritekit 与平台碰撞

ios - 有没有办法反转 SKSpriteNode 的颜色

ios - 在 Swift 中根据触摸正确移动 Sprite

swift - 将 View 置于 UITableViewCell 的中心?看起来位于 UI 层次结构的中心,但不在实际的应用程序中?

iOS Swift POST 参数和正文

swift - 在 Swift 中,您在哪里声明与 addGestureRecognizer() 相关的 UITapGestureRecognizer()?

ios - SKShapeNode 消耗太多内存并减慢动画 - Spritekit iOS