我知道这个问题已被问及之前的答案,但没有一个答案似乎符合我想要做的。我需要能够暂停动画,但仍然可以让我的暂停菜单出现并询问用户输入。这是可能的,如果是这样,我该怎么做。如何在cocos2d中暂停游戏?
回答
我尝试了所有的建议,但没有一个在我的情况下工作,所以这就是我最终做的工作,对我来说非常合适。这是暂停。
[self pauseSchedulerAndActions];
for (CCNode *child in [self children]) {
[child pauseSchedulerAndActions];
}
而这个恢复:
[selfReference resumeSchedulerAndActions];
for (CCNode *child in [selfReference children]) {
[child resumeSchedulerAndActions];
}
停止只是动画?
[ [ CCDirector sharedDirector ] stopAnimation ];
[ [ CCDirector sharedDirector ] startAnimation ];
如果要停止一切,暂停一下,因为你已经看到了做其他任何地方(菜单已被移动到位后),则取消暂停,一旦用户触摸某一件事。
有两种方法pause
和resume
为此,在CCDirector
:
[[CCDirector sharedDirector] pause];
和
[[CCDirector sharedDirector] resume];
从文档:
正在运行的场景将被drawed但所有计划的计时器将暂停,暂停时,提款率将为4 FPS,以减少CPU消耗
我是新来的cocos2D和使用单独的游戏循环(而不是scheduleupdate),并与其他一些调度程序一起未调度。它会自动暂停游戏,同时我在游戏玩家的顶部放置一个新图层(即Pauselayer)。 显得相当复杂,但为我工作。
我建议你推 “暂停的场景” 的cocos2d的现场堆栈。
CCScene * pauseScene = ...;
[[CCDirector sharedDirector] pushScene:pauseScene];
这会自动暂停当前场景(我假设是水平的场景),并运行“暂停场景”,使用户可以与它进行交互。
这是非常重要要记住上面的指令被执行后,你将有2个场景在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"
我用:
@interface CCNode (PauseAdded)
@end
@implementation CCNode (PauseAdded)
-(void) traversePause
{
CCNode* a = [children_ lastObject];
CCARRAY_FOREACH(children_, a)
{
[scheduler_ pauseTarget:a];
[actionManager_ pauseTarget:a];
[a traversePause];
}
[scheduler_ pauseTarget:self];
[actionManager_ pauseTarget:self];
}
-(void) traverseResume
{
CCNode* a = [children_ lastObject];
CCARRAY_FOREACH(children_, a)
{
[a traverseResume];
[scheduler_ resumeTarget:a];
[actionManager_ resumeTarget:a];
}
[scheduler_ resumeTarget:self];
[actionManager_ resumeTarget:self];
}
@end
这样,你可以做这样的事情假设你的游戏层从休止层分离:
[scene.game_layer traversePause];
而取消暂停:
[scene.game_layer traverseResume];
试试这个暂停按钮类https://github.com/iabtyagi/custom-pause-cocos2d。 完全符合您的要求。
随着Cocos 2D版本2的行动管理器不再是一个单身人士。而是代码已经与CCDirector融合。
所以这是暂停在特定的场景中所有的行动,并恢复他们以及方式。
-(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];
}
}
Cocos 2d Ver 2 Action Manager Documentation
希望这有助于。
CCPhysicsNode * _physics;
_physics.paused = TRUE; //将暂停游戏,但没有行动。
_physics.paused = FALSE; //它会恢复你的纺纱和下降的精灵,而按钮可压如暂停比赛中。
- 1. 的cocos2d的Android不暂停游戏
- 2. 如何在cocos2d游戏中实现暂停/恢复?
- 3. cocos2d-android:如何玩/暂停游戏状态
- 4. 如何在cocos2d中从后台恢复游戏后保持暂停状态?
- 5. scoreLabel.text使得游戏暂停
- 6. clearInterval和暂停游戏
- 7. Flash - 暂停游戏ActionScript 3
- 8. 暂停游戏循环?
- 9. 在通话过程中暂停游戏
- 10. 如何在cocos2d中记录游戏iPhone
- 11. nextpeer在cocos2d游戏
- 12. 如何在SpriteKit和SceneKit中暂停游戏 - SWIFT
- 13. 如何在Flash游戏中实现音乐的“暂停”按钮?
- 14. 如何在cocos2d环境之外为cocos2d游戏实现虚拟游戏杆?
- 15. 如何整合cocos2d游戏和游戏中心
- 16. 如何重置游戏在cocos2d
- 17. Spritekit - 保持游戏暂停时didBecomeActive
- 18. 游戏c的暂停按钮#
- 19. 游戏暂停/恢复功能
- 20. 暂停Unity游戏没有“Time.timeScale = 0”
- 21. 球拍暂停/继续按钮,游戏
- 22. 如何暂停cocos2d 2.0中的图层
- 23. cocos2d游戏开发
- 24. Cocos2d游戏崩溃
- 25. iPhone Cocos2d游戏更改为iPad游戏
- 26. Cocos2D游戏教程/游戏建议
- 27. Cocos2d。数字游戏杆(游戏手柄)?
- 28. 当收到消息时(j2me游戏),如何将游戏更改为暂停模式(j2me游戏)
- 29. 在cocos2d游戏中,我如何允许两个游戏杆同时输入?
- 30. 如何重置cocos2d游戏状态?