返回按钮和目录按钮的监听
来源:互联网 发布:mac 休眠后断网 编辑:程序博客网 时间:2024/05/21 04:15
http://www.firedragonpzy.com.cn/index.php/archives/2767
转载自【Softeware MyZone】原文链接: http://www.firedragonpzy.com.cn/index.php/archives/2767
Software MyZone:66202765(群号,欢迎加入,若满,请加1群)
Software MyZone 1群(2dx):286504621
【加群请写:Software MyZone或者是firedragonpzy】
群论坛正在筹建中,欢迎大家多提些建设性意见……
之前写了Box2d物体移动的例子,没有分享一下,最近规整了一下代码,与大家分享。。。
最近做android的游戏,需要监听android的菜单和返回按钮,记得1.x的时候貌似还是比较复杂,没想到2.x的竟然如此简单,现在与大家分享下,一直跟随博文的同志们就不用再从网上search了。
首先,声明函数:
virtual
void
keyBackClicked();
//监听Android 返回键
virtual
void
keyMenuClicked();
//监听Android 菜单键
在cpp中使用的时候记得开启监听事件:
this
->setKeypadEnabled(
true
);
就这么简单…………
这个是使用了CCKeypadDelegate,咱们之所以能用,是因为大家的类继承了CCLayer,CCLayer是这么声明的:
class
CC_DLL CCLayer :
public
CCNode,
public
CCTouchDelegate,
public
CCAccelerometerDelegate,
public
CCKeypadDelegate{……}
它继承了CCKeypadDelegate代理,代理是这样子的:
class
CC_DLL CCKeypadDelegate
{
public
:
// The back key clicked
virtual
void
keyBackClicked() {}
// The menu key clicked. only avialble on wophone & android
virtual
void
keyMenuClicked() {};
};
好了,有关android按钮的监听事件就说到这里吧,呼呼……
、、、、、、、、、、、、、、、、、、、http://blog.csdn.net/we000636/article/details/8597540
cocos2d-x 游戏暂停界面,监听home键,返回键,Menu键 解决方案
游戏暂停界面:
cocos2d-x中游戏暂停界面提供的思路是用pushScene()和popScne(),即推进和弹出场景,当游戏暂停时,推进(pushScene())暂停场景,之前运行的场景将会自动暂停,然后我们可以在暂停场景中操作,如Resume,ReStart,Quit等,当我们不再需要暂停场景时,可以popScene()将暂停场景弹出。(场景就像一张纸,我们推进一个场景,相当于在这张纸上再盖上一张,弹出场景相当于将最表面的那张纸拿掉)。
推进暂停场景的相关代码如下:
- CCRenderTexture *renderTexture = CCRenderTexture::create(800,600);
- renderTexture->begin();
- this->getParent()->visit();
- renderTexture->end(); //这里实际是通过CCRenderTexture保存当前界面(相当于截屏),然后传递给暂停界面,当成背景精灵
- CCDirector::sharedDirector()->pushScene(PauseLayer::scene(renderTexture,true));
暂停场景PauseLayer的相关代码如下:
- CCScene* PauseLayer::scene(CCRenderTexture* sqr,bool isFlip){
- CCScene *m_scene = CCScene::create();
- CCSprite *_spr = CCSprite::createWithTexture(sqr->getSprite()->getTexture());
- _spr->setPosition(ccp(400, 300));
- _spr->setFlipY(isFlip);
- _spr->setColor(ccGRAY);
- m_scene->addChild(_spr);
- // 'layer' is an autorelease object
- PauseLayer* layerr = PauseLayer::create();
- // add layer as a child to scene
- m_scene->addChild(layerr);
- // return the scene
- return m_scene;
- }
监听返回键和Menu键:
要点:
1.继承CCKeypadDelegate
2.实现两个虚函数
virtual void keyBackClicked () virtual void keyMenuClicked ()如查要实现监听的对象是CCLayer或者继承CCLayer的,则只需做第二步及在初始化中setKeypadEnabled(true);
因为CCLayer本身继承了CCKeypadDelegate,如下图所示
- class CC_DLL CCLayer : public CCNode, public CCTouchDelegate, public CCAccelerometerDelegate, public CCKeypadDelegate
监听home键:
在cocos2d-x中我现在还没找到明确的监听home键的方案,但可以用替代方案。
不知你们有没有发现在AppDelegate.cpp里的两个方法:
- // This function will be called when the app is inactive. When comes a phone call,it's be invoked too
- void AppDelegate::applicationDidEnterBackground() {
- CCDirector::sharedDirector()->stopAnimation();
- // if you use SimpleAudioEngine, it must be pause
- // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
- }
- // this function will be called when the app is active again
- void AppDelegate::applicationWillEnterForeground() {
- CCDirector::sharedDirector()->startAnimation();
- // if you use SimpleAudioEngine, it must resume here
- // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
- }
注意这两个方法的英文解释,实际上这两个方法就是判断程序是否被切换或者说是否被扔至后台工作。因为在手机上按home键,实际就是切换将程序推至后台。So,我们就能在这两个方法做文章了。
相关代码如下:
- void AppDelegate::applicationDidEnterBackground()
- {
- CCDirector::sharedDirector()->stopAnimation();
- SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
- Global* sh = Global::toIns();
- CCRenderTexture* renderTexture;
- switch(sh->targetScene){
- case TargetSceneFirstScene:
- break;
- case TargetSceneSecondScene:
- renderTexture = CCRenderTexture::create(800,600);
- renderTexture->begin();
- sh->battleLayer->visit();
- renderTexture->end();
- CCDirector::sharedDirector()->pushScene(PauseLayer::scene(renderTexture,false));
- break;
- case TargetSceneInvalid:
- break;
- default:
- break;
- }
- }
- // this function will be called when the app is active again
- void AppDelegate::applicationWillEnterForeground()
- {
- CCDirector::sharedDirector()->startAnimation();
- SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
- }
在上面的代码中,我做的是,当程序InActive(推至后台)时,推进暂停界面
如果还有其它的解决方案,欢迎留言
- 返回按钮和目录按钮的监听
- 监听手机浏览器的返回按钮事件
- Android 监听返回按钮事件
- Android 监听返回按钮事件
- android监听返回按钮事件
- android监听返回按钮事件
- android监听返回按钮事件
- android监听返回按钮事件
- android监听返回按钮事件
- android监听返回按钮事件
- 按钮的toucheBegin和按钮的监听事件有冲突
- 按钮的监听和touch方法
- Swing的按钮监听
- android让弹出的Builder监听返回按钮
- 微信浏览器左上角返回按钮的监听
- 微信浏览器左上角返回按钮的监听
- 代码添加按钮和按钮监听方法
- 监听按钮的按下和抬起,,toucheBegin会和按钮的监听事件冲突
- android 中如何限制 EditText 最大输入字符数
- 架构分析引起的笔记
- FastDFS分布式文件系统点滴记录5 -- upload上传机制剖析3
- 在ubuntu上安装ruby环境
- python中if __name__ == "__main__":用法解析
- 返回按钮和目录按钮的监听
- [matlab图像处理] 阈值分割
- glibc-printf
- EditText的光标在4.0中的bug
- Kernel. EXPORT_SYMBOL解析
- 二 Gazebo学习总结之Gazebo的组成
- 虚拟主机封杀webshell提权
- Android开发者必知的开发资源
- 深拷贝与浅拷贝