【问题标题】:Pause everything except animation of one node?暂停除一个节点的动画之外的所有内容?
【发布时间】:2016-12-04 01:00:51
【问题描述】:

我正在编写旧版 Space Invaders 游戏的克隆。入侵者在update()期间移动并随机投掷炸弹;触摸屏幕时玩家船会移动。如果入侵者炸弹击中玩家,我希望一切都停止,除了玩家的船死亡动画。完成后,我希望一切重新开始。

实现这一目标的最佳方法是什么?我考虑枚举所有节点,将paused 属性设置为true;在update() 中添加检查以查看死亡动画是否在播放器上运行,如果是则跳过移动,如果动画正在运行,同样忽略用户输入。

另一种方法是创建一个世界节点,其中所有内容都是其子节点。然后我可以暂停世界节点并将玩家船的副本添加到运行动画的场景中,使其看起来除了玩家的船死亡动画之外一切都停止了。

对于我想要的效果,这两个似乎都需要做很多工作。有什么建议吗?

【问题讨论】:

  • 你可以看看我的一个类似太空侵略者游戏的repo:link已经实现了这个功能,除了动画之外的暂停屏幕。
  • @AntonNovoselov - 谢谢。所以你已经走上了让一切都成为一个可通行节点的孩子的路线,允许你独立地暂停星域、敌人等?

标签: ios swift sprite-kit


【解决方案1】:

你可以让两个不可见的rootNode你的敌人、你的物体和你所有的游戏环境(标签、硬币..)都是孩子:

self.rootNode.addChild(enemy1)

还有另一个rootShipNode,您在其中添加了您的播放器。 使用这种方法,您可以在暂停 self 时停止所有操作,或者随时暂停不可见的节点。

您可以采用此过程将 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

但所有添加到 self 的动画和对象,包括pauseNode 元素和动画,都在运行中。

【讨论】:

    猜你喜欢
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    相关资源
    最近更新 更多