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];
}
}