第十三节cocosdx的按键增加过程

介绍如何在Cocos2dx 中处理Android os 的设备的Menu 和Back 案件的响应处理;
其实很简单,步骤如下:
1. 在需要响应的.h 中添加如下两个虚函数:
12 virtual void keyBackClicked();//Android 返回键virtual void keyMenuClicked();//Android 菜
单键
2. .cpp 类中实现如上两个函数即可,如下,Himi 这里测试使用,World 是个Layer
1234567 void World::keyBackClicked(){ CCLog("Android- KeyBackClicked!");} void
World::keyMenuClicked(){ CCLog("Android- keyMenuClicked!");}
3.初始化的时候记得开启: this->setIsKeypadEnabled(true);
然后我们看下CCKeypadDispatcher.cpp 文件里面的dispatchKeypadMSG 函数
case kTypeBackClicked:
pDelegate->keyBackClicked();
break;
case kTypeMenuClicked:
pDelegate->keyMenuClicked();
break;
这里可以看到处理过程。
现在我们来分析下该如何增加其他按键响应的思路:
我们以增加home 来做实验:
首先需要在window 里面传入允许home 传入应用的属性。
随后在:
Cocos2dxGLSurfaceView.java 里面的onKeyDown 增加case KeyEvent.KEYCODE_HOME
在Cocos2dxRenderer.java 里面的handleKeyDown 进行传递到TouchesJni.cpp 里面的
Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeKeyDown
这里面调用:
pDirector->getKeypadDispatcher()->dispatchKeypadMSG(kTypeBackClicked)) 这个方法进行
传递,执行真正的按键处理。
再在dispatchKeypadMSG 函数里面增加
case kTypehomeClicked:
pDelegate->keyhomeClicked();
这里需要在cclayer.cpp 里面增加keyhomeClicked()函数:
void CCLayer::keyMenuClicked(void)
{
if (m_pScriptKeypadHandlerEntry)
{
CCScriptEngineManager::sharedManager()->getScriptEngine()->executeLayerKeypadEvent(this,
kTypehomeClicked);
}
}
CCLayer.h 增加:
virtual void keyhomeClicked(void);
设计完成。

你可能感兴趣的:(android,cocos2dx,实例剖析)