游戏暂停界面:

cocos2d-x中游戏暂停界面提供的思路是用pushScene()和popScne(),即推进和弹出场景,当游戏暂停时,推进(pushScene())暂停场景,之前运行的场景将会自动暂停,然后我们可以在暂停场景中操作,如Resume,ReStart,Quit等,当我们不再需要暂停场景时,可以popScene()将暂停场景弹出。(场景就像一张纸,我们推进一个场景,相当于在这张纸上再盖上一张,弹出场景相当于将最表面的那张纸拿掉)。

推进暂停场景的相关代码如下:

  1. CCRenderTexture *renderTexture = CCRenderTexture::create(800,600);
  2. renderTexture->begin();
  3. this->getParent()->visit();
  4. renderTexture->end();  //这里实际是通过CCRenderTexture保存当前界面(相当于截屏),然后传递给暂停界面,当成背景精灵
  5. CCDirector::sharedDirector()->pushScene(PauseLayer::scene(renderTexture,true));

暂停场景PauseLayer的相关代码如下:

  1. CCScene* PauseLayer::scene(CCRenderTexture* sqr,bool isFlip){
  2. CCScene *m_scene = CCScene::create();
  3. CCSprite *_spr = CCSprite::createWithTexture(sqr->getSprite()->getTexture());
  4. _spr->setPosition(ccp(400, 300));
  5. _spr->setFlipY(isFlip);
  6. _spr->setColor(ccGRAY);
  7. m_scene->addChild(_spr);
  8. // 'layer' is an autorelease object
  9. PauseLayer* layerr = PauseLayer::create();
  10. // add layer as a child to scene
  11. m_scene->addChild(layerr);
  12. // return the scene
  13. return m_scene;
  14. }

监听返回键和Menu键:

要点:

1.继承CCKeypadDelegate

2.实现两个虚函数

virtual void  keyBackClicked ()
 
virtual void  keyMenuClicked ()

如查要实现监听的对象是CCLayer或者继承CCLayer的,则只需做第二步及在初始化中setKeypadEnabled(true);

setKeypadEnabled(true);

因为CCLayer本身继承了CCKeypadDelegate,如下图所示

  1. class CC_DLL CCLayer : public CCNode, public CCTouchDelegate, public CCAccelerometerDelegate, public CCKeypadDelegate

监听home键:

在cocos2d-x中我现在还没找到明确的监听home键的方案,但可以用替代方案。

不知你们有没有发现在AppDelegate.cpp里的两个方法:

  1. // This function will be called when the app is inactive. When comes a phone call,it's be invoked too
  2. void AppDelegate::applicationDidEnterBackground() {
  3. CCDirector::sharedDirector()->stopAnimation();
  4. // if you use SimpleAudioEngine, it must be pause
  5. // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
  6. }
  7. // this function will be called when the app is active again
  8. void AppDelegate::applicationWillEnterForeground() {
  9. CCDirector::sharedDirector()->startAnimation();
  10. // if you use SimpleAudioEngine, it must resume here
  11. // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
  12. }

注意这两个方法的英文解释,实际上这两个方法就是判断程序是否被切换或者说是否被扔至后台工作。因为在手机上按home键,实际就是切换将程序推至后台。So,我们就能在这两个方法做文章了。

相关代码如下:

  1. void AppDelegate::applicationDidEnterBackground()
  2. {
  3. CCDirector::sharedDirector()->stopAnimation();
  4. SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
  5. Global* sh = Global::toIns();
  6. CCRenderTexture* renderTexture;
  7. switch(sh->targetScene){
  8. case TargetSceneFirstScene:
  9. break;
  10. case TargetSceneSecondScene:
  11. renderTexture = CCRenderTexture::create(800,600);
  12. renderTexture->begin();
  13. sh->battleLayer->visit();
  14. renderTexture->end();
  15. CCDirector::sharedDirector()->pushScene(PauseLayer::scene(renderTexture,false));
  16. break;
  17. case TargetSceneInvalid:
  18. break;
  19. default:
  20. break;
  21. }
  22. }
  23. // this function will be called when the app is active again
  24. void AppDelegate::applicationWillEnterForeground()
  25. {
  26. CCDirector::sharedDirector()->startAnimation();
  27. SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
  28. }

在上面的代码中,我做的是,当程序InActive(推至后台)时,推进暂停界面

cocos2d-x 游戏暂停界面,监听home键,返回键,Menu键 解决方案的更多相关文章

  1. 微信浏览器返回刷新,监听微信浏览器返回事件,网页防复制,移动端禁止图片长按和vivo手机点击img标签放大图片

    以下代码都经过iphone7,华为MT7 ,谷歌浏览器,微信开发者工具,PC端微信验证.如有bug,还请在评论区留言. demo链接:https://pan.baidu.com/s/1c35mbjM ...

  2. Html5 监听拦截Android返回键方法详解

    浏览器窗口有一个history对象,用来保存浏览历史. 如果当前窗口先后访问了三个网址,那么history对象就包括三项,history.length属性等于3. history对象提供了一系列方法, ...

  3. JavaScript监听手机物理返回键的两种解决方法

    JavaScript没有监听物理返回键的API,所以只能使用 popstate 事件监听. 有两个解决办法: 1.返回到指定的页面 pushHistory(); window.addEventList ...

  4. VueApp监听手机物理返回键的事件

    代码 第一步创建js文件夹子 在main里面引用   JS文本内容如下 //监听手机物理返回键的事件 document.addEventListener('plusready', function() ...

  5. udp 服务器界面监听

    今天在做项目的时候,发现不同子网下是不能做UDP通信的,不知道是不是这样呢 遇到一个错误:eclipse遇到报错: The type JPEGImageEncoder is not accessibl ...

  6. JS监听浏览器的返回、后退、上一页按钮的事件方法

    在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的需求,那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包等 ...

  7. 页面返回刷新或H5监听(手机的)返回键

    1. pushHistory(); window.addEventListener("popstate", function(e) { alert("我监听到了浏览器的返 ...

  8. H5新特性监听手机的返回键

    var hiddenProperty ='hidden' in document ? 'hidden' :'webkitHidden' in document ? 'webkitHidden' : ' ...

  9. JS高级——监听浏览器的返回事件

    https://www.cnblogs.com/Easty/p/7820055.html https://www.cnblogs.com/zhengyan/p/6912526.html http:// ...

随机推荐

  1. android数据存储之SharedPreferences

    一.SharedPreferences简介      (1)SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activ ...

  2. SpringQtz 时间任务调度

    1.配置所需要maven jar包 <!-- 任务调度需要的jar包--> <dependency> <groupId>org.quartz-scheduler&l ...

  3. python数据分析之pandas库的Series应用

    一.pandas的数据结构介绍 1. Series 1.1 Series是由一种类似于一维数组的对象,它由一组数据以及一组与之相关的数据索引构成.仅由一组数据可产生最简单的Series. from p ...

  4. JDBC Driver

    Infomix Driver: com.informix.jdbc.IfxDriver JDBC URL : jdbc:informix-sqli://<host>:<port> ...

  5. 【jmeter】基于InfluxDB&Grafana的JMeter实时性能测试数据的监控和展示

    本文主要讲述如何利用JMeter监听器Backend Listener,配合使用InfluxDB+Grafana展示实时性能测试数据 关于JMeter实时测试数据 JMeter从2.11版本开始,命令 ...

  6. (转)扩展jquery easyui datagrid 之动态绑定列和数据

    本文转载自:http://blog.csdn.net/littlewolf766/article/details/7336550 easyui datagrid 不支持动态加载列,上次使用的方法是自己 ...

  7. android学习笔记46——File存储

    File存储--IO操作文件 openFileOutput.openFileInput Context提供了如下两个方法来打开本应用程序的数据文件夹里面的文件IO流. 1.FileInputStrea ...

  8. HTML ISO-8859-1 参考手册

    HTML 4.01 支持 ISO 8859-1 (Latin-1) 字符集. ISO-8859-1 的较低部分(从 1 到 127 之间的代码)是最初的 7 比特 ASCII. ISO-8859-1 ...

  9. Chrome开发者工具详解(2)

    Chrome开发者工具面板 面板上包含了Elements面板.Console面板.Sources面板.Network面板.Timeline面板.Profiles面板.Application面板.Sec ...

  10. PLSQL_闪回操作1_Flashback Query

    2014-07-02 Created By BaoXinjian