【问题标题】:Pausing game in Sprite KitSprite Kit 中的暂停游戏
【发布时间】:2014-07-14 03:13:13
【问题描述】:

我在 iOS 7 的 Sprite Kit 中有一个小问题。 我想做的只是暂停我的游戏。问题是我不能使用 self.pausedself.view.paused 属性,因为暂停游戏后,我想在屏幕上放置几个按钮( resume、quit 等)以及那些需要在其上添加动画(如果场景或视图暂停则无法实现)。

我尝试了以下方法:

[self enumerateChildNodesWithName:@"*" usingBlock:^(SKNode *node, BOOL *stop) {
    node.paused = YES;
}];
[self physicsWorld].speed = 0.0;

... 这可以完美地暂停游戏,并且可以很容易地恢复(我不会粘贴该代码,它非常不言自明)。这样游戏就完全冻结了,而且我仍然可以设置一些带有动画的按钮。很好。

唯一的问题是,当我将应用程序发送到后台(通过按下主页按钮)然后将其返回时,游戏不会暂停(即使我每次将应用程序发送到背景)。 在我看来,如果应用程序进入后台,节点会“忘记”它们的 paused 属性设置为 YES。 我尝试 NSLog 找出节点的 paused 属性,这就是我得到的:

游戏运行时为0

应用发送到后台时为1(因为我粘贴的代码设置为1)

应用返回时为 0 (???)

当再次激活应用程序时(来自 - (void)applicationDidBecomeActive:(UIApplication *)application),我尝试调用 [self pauseGame](我自己的方法,其中包含我之前粘贴的代码)但它没有没救有趣...即使在应用激活后调用 pause 方法也不会暂停游戏,而是让它继续运行。

如果有人知道一些事情,我将非常感谢任何帮助。

谢谢,

亚当

【问题讨论】:

  • 您可以尝试在 enumerateChildNodesWithName 中添加node.speed = 0.0;
  • 好的,我试试
  • 它有效:) 这样我什至不需要 node.paused 东西。多谢,伙计。将其添加为答案!

标签: ios objective-c ios7 sprite-kit


【解决方案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 在将应用发送到后台时渲染下一帧时跳过这些节点,因此它没有暂停游戏。

【讨论】:

  • 可以选择另外保留node.paused
  • 是的,为了安全起见,我可能应该这样做。这让游戏现在非常暂停了哈哈。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多