Android中Cocos2d-X引擎响应按键消息【原】

作者: 米兰冬天
发布时间:2015-07-01 17:01:53

转载请注明出处,谢谢!

一、修改cocos2dx/platform/android/jni目录下TouchesJni.cpp文件,添加你想处理的键值,该值务必与Android对应键值保持一致,下面为返回按键和菜单按键的例子,可以添加自己想要的键值:

1 #define KEYCODE_BACK 0x04  2 #define KEYCODE_MENU 0x52

二、修改该文件下的jboolean Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeKeyDown(JNIEnv * env, jobject thiz, jint keyCode)函数如下:

 1 jboolean Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeKeyDown(JNIEnv * env, jobject thiz, jint keyCode) {   2           CCDirector* pDirector = CCDirector::sharedDirector();   3           switch (keyCode) {   4               case KEYCODE_BACK:   5                     if (pDirector->getKeypadDispatcher()->dispatchKeypadMSG(kTypeBackClicked))   6                       return JNI_TRUE;   7                   break;   8               case KEYCODE_MENU:   9                   if (pDirector->getKeypadDispatcher()->dispatchKeypadMSG(kTypeMenuClicked))  10                       return JNI_TRUE;  11                   break;  12               default:  13                   return JNI_FALSE;  14           }  15           return JNI_FALSE;  16       }  17 }

对应的keyCode就是等待处理的键值。

三、修改cocos2dx/keypad_dispatcher目录下CCKeypadDispatcher.h文件如下枚举:

1 typedef enum {  2      // the back key clicked msg  3      kTypeBackClicked = 1,  4      kTypeMenuClicked,  5  } ccKeypadMSGType;

其中的消息类型kTypeBackClicked和kTypeMenuClicked就是第二步中的消息类型的声明。

四、修改对应CPP文件CCKeypadDispatcher.cpp,修改函数dispatchKeypadMSG(ccKeypadMSGType nMsgType),添加自己想要处理的消息类型,这里还是用返回和菜单键举例:

 1 if (m_pDelegates->count() > 0)   2      {   3          CCObject* pObj = NULL;   4          CCARRAY_FOREACH(m_pDelegates, pObj)   5          {   6              CC_BREAK_IF(!pObj);   7     8              pHandler = (CCKeypadHandler*)pObj;   9              pDelegate = pHandler->getDelegate();  10    11              switch (nMsgType)  12              {  13              case kTypeBackClicked:  14                  pDelegate->keyBackClicked();  15                  break;  16              case kTypeMenuClicked:  17                  pDelegate->keyMenuClicked();  18                  break;  19              default:  20                  break;  21              }  22          }  23      }

其中switch语句中要处理的就是自定义的消息类型.

五、修改当前目录下的CCKeypadDelegate.h文件,为CC_DLL CCKeypadDelegate添加如下接口,即为对应消息的响应函数:

1 public:  2       // The back key clicked  3       virtual void keyBackClicked() {}  4     5       // The menu key clicked. only available on wophone & android  6       virtual void keyMenuClicked() {};

六、修改/org/cocos2dx/lib/Cocos2dxGLSurfaceView.java文件中的onKeyDown方法,在switch语句中添加自己定义的消息类型。

七、在要响应的类中实现以上接口即可。

以上为我自己的一些总结,如有不足和错误之处,还请各位批评指正!

来源:http://www.cnblogs.com/acwinder/archive/2013/03/30/2990312.h

推荐: