ler*_*rei 6 xcode ios ios7 sprite-kit
我最近开始开发我的第一个iPhone应用程序,它将是一个2D游戏.到目前为止,一切进展顺利,项目已包含超过一千行代码.
但是,我刚刚陷入了一个小问题.与许多游戏一样,需要暂停它.我的第一个尝试就是在代码中使用它,暂停必须发生.
self.view.paused = true;
Run Code Online (Sandbox Code Playgroud)
工作正常,直到我需要一些动画发生后,有人按下暂停按钮.想象一下,一个新的精灵节点从屏幕底部向上滑动,其中包含有关当前分数的一些细节,等等.当然,使用上面的代码将停止所有动画.
我的新想法是简单地停止必须单独停止的所有节点.我通过使用这段代码得到了它.
[self enumerateChildNodesWithName:@"name" usingBlock:^(SKNode* node, BOOL* stop) {
node.paused = true;
node.speed = 0.0;
}];
Run Code Online (Sandbox Code Playgroud)
尝试了几次,当我遇到另一个问题时,我终于找到了解决方案.需要停止的一些游戏精灵节点在一定时间后定期创建.以下代码负责此行为.
SKAction* createPeriodically = [SKAction repeatActionForever:[SKAction sequence:@[[SKAction performSelector:@selector(create) onTarget:self],[SKAction waitForDuration:15.0]]]];
[self runAction:createPeriodically];
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在使用waitForDuration在创建精灵节点之间有一个延迟.现在,当我暂停所有节点时,时间仍然继续,因此waitForDuration在设定的时间量之后完成,并且正在创建精灵节点,尽管所有其他节点都已暂停且未移动.
我希望你们能够理解我的问题.我正在寻找一种暂停机制来定期创建精灵节点的方法,同时仍能够在之后创建新的精灵节点并对新节点执行操作.任何帮助表示赞赏.谢谢.
如果您paused在节点上进行设置,则会暂停该节点及其子节点的所有操作。createPeriodically因此,您可以通过设置场景的属性来暂停整个场景(包括 )上的所有操作paused,但随后您将回到与暂停视图相同的场景。
但是您可以利用节点及其子部分的这一点来组织场景。不要让组成游戏的所有节点成为场景的直接子节点,而是创建一个单独的节点来包含所有节点。不要createPeriodically在场景中全局运行影响游戏内容的操作(例如 ),而是在这个单独的节点上运行它们。现在,当您想要暂停游戏时,paused在此节点上设置 \xe2\x80\x94 所有游戏内容操作都将暂停,但仍然有空间在场景本身上运行操作或直接添加其他非暂停节点你的场景的孩子们。