【问题标题】:pause spritekit scene and show "paused" label暂停 spritekit 场景并显示“暂停”标签
【发布时间】: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 来暂停场景,则会显示标签,但游戏会在该计时器时间内继续。

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

提前致谢

【问题讨论】:

    标签: ios objective-c ios7 sprite-kit


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 2016-01-24
    • 1970-01-01
    相关资源
    最近更新 更多