创建暂停菜单的最佳方法是什么?

时间:2015-01-24 17:00:44

标签: ios objective-c sprite-kit

我想创建一个通过点击SKSpriteNode激活的菜单,然后暂停游戏中除恢复和重启按钮之外的所有内容,并在用户离开应用时激活。

我目前通过bool调用isPaused执行此操作,并且只有当isPaused设置为NO时才会激活所有方法。每当触摸暂停节点时,它都会设置为YES,一切都会停止。然而,这会给我带来很多麻烦,例如,当调用didEnterBackground时,我会调用暂停场景的方法,但是当你重新打开应用程序时暂停菜单就不存在了。

我想知道这样做的最佳方法是什么。

3 个答案:

答案 0 :(得分:3)

我建议使用游戏层'节点。它就像一个包含游戏中所有节点的超级节点。

诀窍是,如果你再调用gameLayer.paused = true,那么所有子节点也会暂停,因为pause函数是递归的。

例如:

<强>夫特

var gameLayer = SKNode()

var node1 = SKSpriteNode()
var node2 = SKSpriteNode()

var specialNode = SKSpriteNode()

gameLayer.addChild(node1)
gameLayer.addChild(node2)

gameLayer.pause = true

//node1 and node2 will pause also

<强>目标C

SKSpriteNode *node1 = [SKSpriteNode new];
SKSpriteNode *node2 = [SKSpriteNode new];
SKSpriteNode *specialNode = [SKSpriteNode new];

[gameLayer addChild: node1];
[gameLayer addChild: node2];

gameLayer.paused = TRUE;

现在,您可以随时调用gameLayer.paused = true并立即暂停所有节点。

答案 1 :(得分:1)

要继续您的思路,请在更新方法中使用BOOL,如下所示:

-(void)update:(CFTimeInterval)currentTime {
    if(isPaused) {
        // handle only processing during a pause
    } else {
        // handle processing while not paused
    }
}

答案 2 :(得分:0)

点击此处查看我的问题:didBecomeActive un-pauses game

我可以看到当我到达计算机时是否可以发布我的代码(在NDA下)。答案确实有效,我对添加计时器的评论也很有效。