cocos2dx监听home键,锁屏,后台转前台暂停功能
来源:互联网 发布:淘宝小背包 编辑:程序博客网 时间:2024/05/21 17:42
2013-03-30 13:29 1083人阅读 评论(1) 收藏 举报
根据cocos2d-x游戏原理当home键或者锁屏键被按下,游戏处于后台状态就会调用AppDelegate.cpp里面的方法applicationDidEnterBackground()
其实按照这个方法的意思就可以知道到底是怎么回事了。所以我们就在这个方法内部写自己的东西。
首先,我说一下原理, 自己写了一个Dialog 模态对话框(这个可以搜到), 然后写了自己写了一个方法
- 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;
- }
传入一个CCrenderTexture 相当于一个正在运行的游戏的截图作为这个暂停对话框的背景 这样就看起来像是对话框在游戏界面之上,一般游戏当中都是这样子写的。
在applicationDidEnterBackground()里面这样写:
- void AppDelegate::applicationDidEnterBackground()
- {
- CCDirector::sharedDirector()->stopAnimation();
- SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
- CCSize size = CCDirector::sharedDirector()->getWinSize();
- 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);
- pause->setTag(30+1);
- CCDirector::sharedDirector()->pushScene(pause);
- }else
- {
- CCLog("do nothing");
- }
- }
我把我游戏的场景设置了一个Tag 这样子我就可以判断什么时候弹出暂停对话框:就是当游戏处于运行状态的时候才弹出对话框 当游戏处于选择关卡什么的界面的时候没有必要弹出对话框的。
当写了以上代码后 成功运行在android上面,但是发现游戏暂停是暂停了 但是背景音乐没有暂停,这个时候就得说起另外一个方法applicationWillEnterForeground 当home键以后再进入游戏就会执行这个
所以我这样写的:
- CCDirector::sharedDirector()->startAnimation();
- int tag = CCDirector::sharedDirector()->getRunningScene()->getTag();
- switch (tag)
- {
- case 30:
- CCLog("Tag = 30 do nothing");
- break;
- case 31:
- CCLog("Tag = 31 do nothing");
- break;
- default:
- CCLog("Tag = other do something");
- SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
- break;
- }
然后在pauseLayer里面当点击继续游戏的时候恢复声音 这种用户体验很好
- void PauseLayer::NextMenuItemCallback(CCObject *pSender)
- {
- SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
- CCDirector::sharedDirector()->popScene();
- }
对了为什么要用 CCDirector::sharedDirector()->pushScene(pause);呢 是因为在punshScene我的这个暂停CCScene以后 原来的那个CCScene在栈底处于暂停状态 所以我们在pauseLayer里面当点击继续游戏按钮的时候 就把pauseLayer从栈中pop弹出 然后游戏场景就会恢复正常。
效果图:
- cocos2dx监听home键,锁屏,后台转前台暂停功能
- cocos2dx监听home键,锁屏,后台转前台暂停功能
- cocos2dx监听home键,锁屏,后台转前台暂停功能
- cocos2dx监听home键,锁屏,后台转前台暂停功能
- cocos2dx监听home键,锁屏,后台转前台暂停功能
- cocos2dx监听home键,锁屏,后台转前台暂停功能
- cocos2dx监听home键,锁屏,后台转前台暂停功能
- cocos2dx监听home键,锁屏,后台转前台暂停功能
- 监听android home键后台运行
- home键监听(Android应用切换到后台监听)
- [Android开发] 从后台恢复前台界面需要输入密码的demo|监听Home短按长按锁屏
- cocos2dx设置监听Android的返回键、Home键
- soc_linux- 前台后台运行程序,后台程序暂停
- Android 监听前台后台切换
- android判断app置于后台监听home键
- cocos2d-x 游戏暂停界面,监听home键,返回键,Menu键 解决方案
- cocos2d-x 游戏暂停界面,监听home键,返回键,Menu键 解决方案
- cocos2d-x 游戏暂停界面,监听home键,返回键,Menu键 解决方案
- 选择类排序法——归并排序
- Android推送服务——百度云推送
- android 异步加载 二
- 我的Java开发学习之旅------>工具类:将播放器的进度值转换成相应的时间格式
- oracle 11G 审计
- cocos2dx监听home键,锁屏,后台转前台暂停功能
- 配置JBoss7数据源
- 小一霸王的小窝于2013.12.06正式建立!
- CEdit类(编辑类)成员函数及消息
- 合泰 HT48R06A-1 HT48C06 定时器 io初始化
- CentOS 下 Tomcat 自启动
- evercookie
- Linux下启动监听配置图形界面出错解决办法
- 解决maven【传递依赖】中的版本冲突