我想创建一个通过点击SKSpriteNode激活的菜单,然后暂停游戏中除恢复和重启按钮之外的所有内容,并在用户离开应用时激活。
我目前通过bool调用isPaused执行此操作,并且只有当isPaused设置为NO时才会激活所有方法。每当触摸暂停节点时,它都会设置为YES,一切都会停止。然而,这会给我带来很多麻烦,例如,当调用didEnterBackground时,我会调用暂停场景的方法,但是当你重新打开应用程序时暂停菜单就不存在了。
我想知道这样做的最佳方法是什么。
答案 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下)。答案确实有效,我对添加计时器的评论也很有效。