今天我们了解一下cocos 整个场景暂停处理,看看如何利用代码完成这个过程。

cocos2d-x中游戏暂停界面提供的思路是用pushScene()和popScne(),
即推进和弹出场景,当游戏暂停时,推进(pushScene())暂停场景,之前运行的场景将会自动暂停,然后我们可以在暂停场景中操作,

当我们不再需要暂停场景时,可以popScene()将暂停场景弹出。

(场景就像一张纸,我们推进一个场景,相当于在这张纸上再盖上一张,弹出场景相当于将最表面的那张纸拿掉)。
  1. [cpp] view plaincopy
  2. // 触摸暂停按钮
  3. void GameLayer::TouchPaushButton()
  4. {
  5. // 保存当前场景图
  6. CCRenderTexture *renderTexture = CCRenderTexture::create(_visibleSize.width,_visibleSize.height);
  7. renderTexture->begin();
  8. this->getParent()->visit();
  9. renderTexture->end();  //这里实际是通过CCRenderTexture保存当前界面(相当于截屏),然后传递给暂停界面,当成背景精灵
  10. // 弹出暂停对话框
  11. _sceneManager->GotoDialogScene(renderTexture);
  12. }
  13. //暂停对话框
  14. void SceneManager::GotoDialogScene(CCRenderTexture *renderTexture)
  15. {
  16. cocos2d::CCDirector* pDirector = cocos2d::CCDirector::sharedDirector();
  17. CreateDialogScene(renderTexture);
  18. pDirector->pushScene(_dialogScene);
  19. }
  20. // 创建对话框界面
  21. void SceneManager::CreateDialogScene(CCRenderTexture *renderTexture)
  22. {
  23. _dialogScene = CCScene::create();
  24. CCSprite *_spr = CCSprite::createWithTexture(renderTexture->getSprite()->getTexture());
  25. _spr->setAnchorPoint(ccp(0, 0));
  26. _spr->setFlipY(true);
  27. _dialogScene->addChild(_spr);
  28. DialogLayer* layer = DialogLayer::create();
  29. layer->_sceneManager = this;
  30. _dialogScene->addChild(layer);
  31. }
  32. // DialogLayer.cpp
  33. // 继续游戏回调方法
  34. void DialogLayer::menuCallbackContinueGame(CCObject* pSender)
  35. {
  36. CCDirector::sharedDirector()->popScene();
  37. }
  38. // 退出游戏回调方法
  39. void DialogLayer::menuCallbackExitGame(CCObject* pSender)
  40. {
  41. CCDirector::sharedDirector()->popScene();
  42. _sceneManager->GotoMapScene();
  43. }