Objective c 如何在cocos2d中暂停游戏?

Objective c 如何在cocos2d中暂停游戏?,objective-c,cocos2d-iphone,Objective C,Cocos2d Iphone,我知道这个问题以前有人问过,也有人回答过,但没有一个答案符合我的意图。我需要能够暂停动画,但仍然能够有我的暂停菜单来要求用户输入。这可能吗?如果可能,我该怎么做。只停止动画 [ [ CCDirector sharedDirector ] stopAnimation ]; [ [ CCDirector sharedDirector ] startAnimation ]; 如果您想停止所有操作,请像您在其他地方看到的那样暂停(在菜单移动到位后),然后在用户触摸到某个对象后取消暂停。在CCDire

我知道这个问题以前有人问过,也有人回答过,但没有一个答案符合我的意图。我需要能够暂停动画,但仍然能够有我的暂停菜单来要求用户输入。这可能吗?如果可能,我该怎么做。

只停止动画

[ [ CCDirector sharedDirector ] stopAnimation ];

[ [ CCDirector sharedDirector ] startAnimation ];

如果您想停止所有操作,请像您在其他地方看到的那样暂停(在菜单移动到位后),然后在用户触摸到某个对象后取消暂停。

CCDirector
中有两种方法
暂停
恢复

[[CCDirector sharedDirector] pause];

从文件中:

正在运行的场景将被绘制,但所有计划的计时器将在暂停时暂停,绘制速率将为4 FPS,以减少CPU消耗


我是cocos2D新手,使用了单独的游戏循环(而不是scheduleupdate),并且正在将其与更多的调度器一起取消计划。当我在游戏层的顶部放置一个新层(即Pauselayer)时,它会自动暂停游戏。
看起来很复杂,但对我有效。

我尝试了所有的建议,但没有一个对我有效,所以这就是我最后做的,对我来说非常有效。这是暂停

[self pauseSchedulerAndActions];
for (CCNode *child in [self children]) {
    [child pauseSchedulerAndActions];

}
现在恢复这项工作:

        [selfReference resumeSchedulerAndActions];
        for (CCNode *child in [selfReference children]) {
            [child resumeSchedulerAndActions];

        }

我建议您在cocos2d场景堆栈上按下“暂停场景”

CCScene * pauseScene = ...;
[[CCDirector sharedDirector] pushScene:pauseScene];
这将自动暂停您当前的场景(我假设是水平场景),并运行“暂停场景”,以便用户可以与之交互

非常重要的是要记住,执行上述指令后,cocos2d的场景堆栈中将有两个场景(级别场景[冻结]+暂停场景[运行])

因此,一旦进入“暂停场景”,如果希望恢复该级别,只需从堆栈中弹出暂停场景即可

[[CCDirector sharedDirector] popScene];
这将自动删除“暂停场景”,并恢复堆栈中的上一个场景(即级别场景)

请记住,您总是需要在某个时候“弹出”暂停场景。重要的是不要忘记“级别场景”仍然在cocos2d的场景堆栈中

例如:如果在“暂停场景”中,您有一个按钮来加载关卡选择菜单并永久离开当前关卡,则应按如下方式执行:

CCScene * levelSelector = ... 
[[CCDirector sharedDirector] popScene]; // to remove the "pause scene" from the stack
[[CCDirector sharedDirector] replaceScene:levelSelector]; // replace the "level scene" with the "levelSelector scene"
我使用:

这样,您可以在游戏层与暂停层分离的情况下执行以下操作:

[scene.game_layer traversePause];
并取消暂停:

[scene.game_layer traverseResume];

试试这个PauseButton类。
完全符合您的要求。

使用Cocos 2D版本2,action manager不再是一个单身汉。但实际上,代码已经与CCD总监融合在一起

因此,这是暂停特定场景中的所有动作并恢复它们的方法

-(void)pauseGamePlayScene{
    for(CCSprite *sprite in [self children]) {
        [[[CCDirector sharedDirector] actionManager]pauseTarget:sprite];   
    }
}

-(void)resumeGamePlayScene{
    for(CCSprite *sprite in [self children]) {
        [[[CCDirector sharedDirector] actionManager]resumeTarget:sprite];
    }
}


希望这能有所帮助。

CCPhysisnode*\u physics

_physics.paused=true;//它会暂停游戏,但不会暂停动作

_physics.paused=false;//它将恢复您的旋转和下降的精灵,而按钮是在暂停游戏一样按下

[scene.game_layer traverseResume];
-(void)pauseGamePlayScene{
    for(CCSprite *sprite in [self children]) {
        [[[CCDirector sharedDirector] actionManager]pauseTarget:sprite];   
    }
}

-(void)resumeGamePlayScene{
    for(CCSprite *sprite in [self children]) {
        [[[CCDirector sharedDirector] actionManager]resumeTarget:sprite];
    }
}