cocos2dx 项目经验之截图设置弹出暂停界面
2013-10-10 16:21
405 查看
在项目开发时,发现如果用CCDirector::sharedDirector()->pause();之后精灵是做不了动作的,所以我寻求了另一种方法,
原理就是要弹出暂停界面是就用push(暂停场景),及顾名思义推出一个暂停界面,将游戏界面暂停压入栈中,当暂停界面响应后(或做动作完后)就可以pop,及拿出意思,推出栈,及之前的游戏界面会继续开始。
先新建一个暂停类PauseLayer
下面是部分实现 CCRenderTexture 是传过来的截图纹理 :
暂停之后恢复游戏使用
然后就有个新的问题了,如果我的手机点击了桌面键(Home),正在进行的游戏需要变成暂停状态,该如何弄的呢,一开始我想到了用控制home的监听,但结果似乎起不来作用(它直接响应了回到手机主界面),所以只能在AppDelegate类里面修改
必须在这两个函数动手脚applicationDidEnterBackground(),applicationWillEnterForeground()
第一个表示的是退出游戏界面时(及桌面不显示游戏界面时),第二个表示的是回到游戏界面时
就这样子就搞定了 加油、。。。。。
原理就是要弹出暂停界面是就用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; } }
就这样子就搞定了 加油、。。。。。
相关文章推荐
- 截图设置弹出暂停界面
- C#Windows窗体界面设计_攻击决策项目_02_设计窗体_03_设置窗体弹出退出顺序
- 设置进入存在EditText的界面时,输入法不会自动弹出
- 项目经验谈---IM新消息界面刷新异常处理记录
- IOS项目开发实战——Storyboard设置界面技巧与注意事项
- EasyUI,项目界面截图1、
- AutoIT:界面与自动化操作结合来简化日常劳动: .Net Reactor验证License,设置License,创建License,截图AutoIt自动化实现。(一)
- 【Android开发经验】设置不自动弹出软键盘的最简洁解决方案
- 【项目经验】Iphone和ipad的GUi 界面设计风格
- EasyUI,项目界面截图2、
- Lync 项目经验-28-设置-所有用户-OWA-时区-语言-跳过-时区设置)
- Android系统源代码学习-三击事件的实现(Android设置界面的三击Android版本弹出logo)
- JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
- phonegap 开发andorid项目 弹出软键盘 界面错乱
- AutoIT:界面与自动化操作结合来简化日常劳动: .Net Reactor验证License,设置License,创建License,截图AutoIt自动化实现。(二)
- iOS项目开发实战——storyboard设置界面技巧与注意事项
- EasyUI,项目界面截图3、表中表
- Android studio 设置每次启动在欢迎页(选择项目的界面)
- Lync 项目经验-29-批量-启用用户-启用企业语音-设置分机号(项目中)
- VS项目属性设置的一小经验