您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx 项目经验之截图设置弹出暂停界面

2013-10-10 16:21 405 查看
在项目开发时,发现如果用CCDirector::sharedDirector()->pause();之后精灵是做不了动作的,所以我寻求了另一种方法,

原理就是要弹出暂停界面是就用push(暂停场景),及顾名思义推出一个暂停界面,将游戏界面暂停压入栈中,当暂停界面响应后(或做动作完后)就可以pop,及拿出意思,推出栈,及之前的游戏界面会继续开始。

先新建一个暂停类PauseLayer

下面是部分实现 CCRenderTexture 是传过来的截图纹理 :

CCScene* PauseLayer::scene( CCRenderTexture *sqr, bool isFlip )
{
CCScene *scene = CCScene::create();
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);  //颜色(变灰暗)
scene->addChild(_spr);
PauseLayer* layer = PauseLayer::create();
scene->addChild(layer);

return scene;
CCDirector::sharedDirector()->pause();
}

暂停之后恢复游戏使用

CCDirector::sharedDirector()->popScene();

然后就有个新的问题了,如果我的手机点击了桌面键(Home),正在进行的游戏需要变成暂停状态,该如何弄的呢,一开始我想到了用控制home的监听,但结果似乎起不来作用(它直接响应了回到手机主界面),所以只能在AppDelegate类里面修改

必须在这两个函数动手脚applicationDidEnterBackground(),applicationWillEnterForeground()

第一个表示的是退出游戏界面时(及桌面不显示游戏界面时),第二个表示的是回到游戏界面时

void AppDelegate::applicationDidEnterBackground()
{
CCDirector::sharedDirector()->stopAnimation();
SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
CCSize size = CCDirector::sharedDirector()->getWinSize();//在游戏界面类里的scene定义一个tag为30

CCRenderTexture* renderTexture = CCRenderTexture::create(size.width, size.height);
renderTexture->retain();
CCScene *s = CCDirector::sharedDirector()->getRunningScene();

CCLog("%d", s->getTag());

if (s->getTag() == 30)
{
renderTexture->begin();
s->visit();
renderTexture->end();
CCScene* pause = PauseLayer::scene(renderTexture, true);
Game::pauseflag=true;
pause->setTag(30+1);
CCDirector::sharedDirector()->pushScene(pause);
}else
{
CCLog("do nothing");
}

}

void AppDelegate::applicationWillEnterForeground()
{
CCDirector::sharedDirector()->startAnimation();
int tag = CCDirector::sharedDirector()->getRunningScene()->getTag();

switch (tag)
{
case 31:

//回到来后判断是否为暂停界面 是的话不恢复声音
CCLog("Tag = 31 do nothing");
break;
default:
CCLog("Tag = other do something");
SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
break;
}
}

就这样子就搞定了 加油、。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cocos2dx