我在iOS 7的Sprite Kit中遇到了一些问题。
我想做的就是暂停我的比赛。问题是我无法使用 self.paused
或 self.view.paused
属性,因为暂停游戏后,我想放几个按钮在屏幕上(继续,退出等)和那些需要动画的人(如果场景或视图暂停,这是不可能的。)
我尝试了以下内容:
[self enumerateChildNodesWithName:@"*" usingBlock:^(SKNode *node, BOOL *stop) {
node.paused = YES;
}];
[self physicsWorld].speed = 0.0;
...这完美地暂停了游戏,并且它可以很容易地恢复(我不会粘贴代码,这是非常自我解释)。这样游戏完全冻结了,我仍然可以用动画放置一些按钮。好。
唯一的问题是,当我将应用程序发送到后台(通过按下主页按钮)然后将其恢复时,游戏不会暂停(即使我每次将应用程序发送到上面时都会调用上面的代码背景)。 在某种程度上,我认为节点“忘记”他们的 paused
属性设置为 YES
如果应用进入背景。我尝试了 NSLog
输出节点的 paused
属性,这就是我得到的:
0
1将应用程序发送到后台(因为我粘贴的代码将其设置为1)
应用程序回来时0(???)
我再次激活应用时尝试调用 [self pauseGame]
(我自己的方法,其中包含我之前粘贴的代码)(来自 - (void)applicationDidBecomeActive:(UIApplication *)application
)但它没有帮助。有意思......甚至在应用程序变为活动状态后调用暂停方法也不会暂停游戏,而是让它继续运行。
如果有人知道某事,我真的很感激任何帮助。
谢谢,
亚当
答案 0 :(得分:1)
改变这个:
[self enumerateChildNodesWithName:@"*" usingBlock:^(SKNode *node, BOOL *stop) {
node.paused = YES;
}];
对此:
[self enumerateChildNodesWithName:@"*" usingBlock:^(SKNode *node, BOOL *stop) {
node.speed = 0.0;
}];
通过将速度设置为0,您可以确保即使正在处理节点的操作,也不会发生任何操作。由于某些原因,当应用程序发送到后台时,node.paused
没有导致SpriteKit在渲染下一帧时跳过这些节点,因此它没有暂停游戏。