今天我们了解一下cocos 整个场景暂停处理,看看如何利用代码完成这个过程。
cocos2d-x中游戏暂停界面提供的思路是用pushScene()和popScne(),即推进和弹出场景,当游戏暂停时,推进(pushScene())暂停场景,之前运行的场景将会自动暂停,然后我们可以在暂停场景中操作,
当我们不再需要暂停场景时,可以popScene()将暂停场景弹出。
(场景就像一张纸,我们推进一个场景,相当于在这张纸上再盖上一张,弹出场景相当于将最表面的那张纸拿掉)。- [cpp] view plaincopy
- // 触摸暂停按钮
- void GameLayer::TouchPaushButton()
- {
- // 保存当前场景图
- CCRenderTexture *renderTexture = CCRenderTexture::create(_visibleSize.width,_visibleSize.height);
- renderTexture->begin();
- this->getParent()->visit();
- renderTexture->end(); //这里实际是通过CCRenderTexture保存当前界面(相当于截屏),然后传递给暂停界面,当成背景精灵
- // 弹出暂停对话框
- _sceneManager->GotoDialogScene(renderTexture);
- }
- //暂停对话框
- void SceneManager::GotoDialogScene(CCRenderTexture *renderTexture)
- {
- cocos2d::CCDirector* pDirector = cocos2d::CCDirector::sharedDirector();
- CreateDialogScene(renderTexture);
- pDirector->pushScene(_dialogScene);
- }
- // 创建对话框界面
- void SceneManager::CreateDialogScene(CCRenderTexture *renderTexture)
- {
- _dialogScene = CCScene::create();
- CCSprite *_spr = CCSprite::createWithTexture(renderTexture->getSprite()->getTexture());
- _spr->setAnchorPoint(ccp(0, 0));
- _spr->setFlipY(true);
- _dialogScene->addChild(_spr);
- DialogLayer* layer = DialogLayer::create();
- layer->_sceneManager = this;
- _dialogScene->addChild(layer);
- }
- // DialogLayer.cpp
- // 继续游戏回调方法
- void DialogLayer::menuCallbackContinueGame(CCObject* pSender)
- {
- CCDirector::sharedDirector()->popScene();
- }
- // 退出游戏回调方法
- void DialogLayer::menuCallbackExitGame(CCObject* pSender)
- {
- CCDirector::sharedDirector()->popScene();
- _sceneManager->GotoMapScene();
- }