原理
cocos2d-x 中有个简单的实现游戏的暂停与恢复,就是利用pushScene 和popScene,当调用pushScene的时候,系统会自动将之前的scene给暂停。然后我们就可以在暂停的scene中操作了。实现这个暂停scene的时候可以利用CCRenderTexture做出一点特效(相当于透明暂停,可以看到上一个scene的截图)。CCRenderTexture这个具体的用法可以看帮助手册或者google。
下面是演示代码
//暂停回调
void MainMenuLayer::pauseLogicCallback(CCObject *pSender)
{
//这里是把前一个scene截个图传到下一个scene作为背景
CCRenderTexture *renderTexture = CCRenderTexture::create(getWinSize().width,getWinSize().height);
renderTexture->begin();
this->getParent()->visit();
renderTexture->end();
//这里加入push特效
CCDirector::sharedDirector()->pushScene( CCTransitionFade::create( 0.5f, PauseLayer::scene(renderTexture,true)));
}
这里跳转到下一个scene
CCScene *PauseLayer::scene(CCRenderTexture* sqr,bool isFlip)
{
CCScene *sc = NULL;
do{
sc = CCScene::create();
CC_BREAK_IF(!sc);
CCSize size = CCDirector::sharedDirector()->getWinSize();
CCSprite *_spr = CCSprite::createWithTexture(sqr->getSprite()->getTexture());
_spr->setPosition(ccp(size.width/2, size.height/2));
_spr->setFlipY(isFlip);
_spr->setColor(ccGRAY);
sc->addChild(_spr);
PauseLayer *layer = PauseLayer::create();
CC_BREAK_IF(!layer);
sc->addChild(layer);
}while(0);
return sc;
}
效果图
图1
完整实例
百度网盘:http://pan.baidu.com/share/link?shareid=2380523568&uk=2684847550