暂停 spritekit 场景并显示“暂停”标签

Posted

技术标签:

【中文标题】暂停 spritekit 场景并显示“暂停”标签【英文标题】:pause spritekit scene and show "paused" label 【发布时间】:2014-04-09 10:37:31 【问题描述】:

当有人点击屏幕并因此暂停 sprite kit 游戏时,我想显示“暂停”SKLabelNode

所以我在touchesBegan ->

[self.pausedLabel setHidden:!self.pausedLabel.hidden];
[self.scene.view setPaused:!self.scene.view.paused];

游戏已正确暂停,但未显示SKLabelNode(暂停前未渲染场景?!) 如果我添加 NSTimer 来暂停场景,则会显示标签,但游戏会在该计时器时间内继续。

有人对此有更好的解决方案吗?

提前致谢

【问题讨论】:

【参考方案1】:

我会为此使用 SKAction。您可以使用 +runBlock: 添加与隐藏标签相关的代码,然后使用带有完成处理程序的 -runAction 方法来暂停场景。 runBlock: 方法可能会立即返回,但这样,屏幕会在场景暂停之前设法更新。

SKAction *action = [SKAction runBlock:^
    [self.pausedLabel setHidden:!self.pausedLabel.hidden];
];

[self.pausedLabel runAction:action completion:^
    [self.scene.view setPaused:!self.scene.paused];
];

【讨论】:

这不起作用,因为视图暂停时不会执行操作。所以当用户再次点击时它永远不会恢复.. 我已经编辑了你的答案。现在它正在工作。谢谢!【参考方案2】:

只需使用状态 ivar 来确定场景是否应该更新其内容。 当您单击按钮时,将此状态设置为 PAUSE 并在您的场景帧更新循环中测试该状态。

if (_state != PAUSE) // Use enum for the state var
    // Update scene objects

当你的按钮被点击时:

为场景添加暂停标签 将状态设置为PAUSE

这种方法的好处是它可以让您准确地决定暂停时会发生什么(与暂停整个场景相反)。您可以在暂停时为酷炫的背景设置动画,或者做任何您想做的事情,因为这完全由您控制

【讨论】:

这会起作用,但是即使用户暂停了游戏(大约 20%),我也会使用 CPU 能力。我认为这不是最佳做法.. 您并没有过度使用 CPU,因为主循环仍将运行并渲染所有节点并执行逻辑工作。这就像说一个空的场景会过度使用不正确的 CPU

以上是关于暂停 spritekit 场景并显示“暂停”标签的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit:在场景过渡中暂停动画

“点击恢复”暂停文本 SpriteKit

SpriteKit 自动恢复和自动暂停 iOS8

SpriteKit - didBecomeActive 时不显示暂停屏幕

使用 swift 和 spritekit,你如何阻止场景在变得活跃/移动到前台后取消暂停?

SpriteKit - 暂停输入