暂停 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 - didBecomeActive 时不显示暂停屏幕