在Sprite Kit中暂停游戏

时间:2014-05-25 03:04:17

标签: ios objective-c ios7 sprite-kit

我在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 )但它没有帮助。有意思......甚至在应用程序变为活动状态后调用暂停方法也不会暂停游戏,而是让它继续运行。

如果有人知道某事,我真的很感激任何帮助。

谢谢,

亚当

1 个答案:

答案 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在渲染下一帧时跳过这些节点,因此它没有暂停游戏。