我正在写一个旧的Space Invaders游戏的克隆。在update()
期间移动入侵者并随机丢弃炸弹;当触摸屏幕时,玩家船舶移动。如果入侵者的炸弹击中了玩家,我希望一切都能停止,除了玩家的死亡动画。一旦完成,我希望一切都重新开始。
实现这一目标的最佳方法是什么?我考虑枚举所有节点,将paused
属性设置为true
;在update()
中添加一个检查,以查看死亡动画是否在播放器上运行,如果是,则跳过移动,如果动画正在运行,同样忽略用户输入。
另一种方法是拥有一个世界节点,其中一切都是孩子。然后,我可以暂停世界节点并将播放器的船的副本添加到运行动画的场景中,使得除了玩家的船舶死亡动画之外,所有内容都已停止。
对于我想要的效果,这些似乎都有很多工作要做。有什么建议吗?
答案 0 :(得分:2)
你可以制作两个不可见的rootNode
,你的敌人,你的物品和你所有的游戏环境(标签,硬币......)都是孩子:
self.rootNode.addChild(enemy1)
以及您添加了播放器的另一个rootShipNode
。
使用这种方法,您可以在暂停自我时停止所有,或者在需要时暂停不可见的节点。
您可以采用此过程向场景中添加pauseNode(SKNode
):
var pauseNode: SKNode! // a node with resume, go to menu, buttons
self.addChild(pauseNode)
当您按下暂停按钮时,您可以打开pauseNode
并启动:
self.rootNode.paused = true
self.rootPlayerNode.paused = true
但是添加到自身,pauseNode
元素和动画中的所有动画和对象都在运行。