标签:cocos2dx android 不响应返回键 返回键无效 cocos2dx3.0
原因很简单, android的按键事件触发的是onKeyReleased。而不是onKeyPressed。
下面贴上关键代码
1.android部分响应按键,接下来就调用jni接口了
public boolean onKeyDown(final int pKeyCode, final KeyEvent pKeyEvent) {
switch (pKeyCode) {
case KeyEvent.KEYCODE_BACK:
Cocos2dxVideoHelper.mVideoHandler.sendEmptyMessage(Cocos2dxVideoHelper.KeyEventBack);
case KeyEvent.KEYCODE_MENU:
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_RIGHT:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_ENTER:
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
case KeyEvent.KEYCODE_DPAD_CENTER:
this.queueEvent(new Runnable() {
@Override
public void run() {
<span style="color:#FF0000;"> Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleKeyDown(pKeyCode);</span>
}
});
return true;
default:
return super.onKeyDown(pKeyCode, pKeyEvent);
}
}2.jni接口被调用,按键Event创建 (TouchesJni.cpp)
JNIEXPORT jboolean JNICALL Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeKeyDown(JNIEnv * env, jobject thiz, jint keyCode) {
Director* pDirector = Director::getInstance();
auto iterKeyCode = g_keyCodeMap.find(keyCode);
if (iterKeyCode == g_keyCodeMap.end()) {
return JNI_FALSE;
}
cocos2d::EventKeyboard::KeyCode cocos2dKey = g_keyCodeMap.at(keyCode);
<span style="color:#FF0000;">cocos2d::EventKeyboard event(cocos2dKey, false); // 虽然是keyDown,但被设置为released消息</span>
cocos2d::Director::getInstance()->getEventDispatcher()->dispatchEvent(&event);
return JNI_TRUE;
}}
诶。。。。。
cocos2dx3.2在android上返回键无法响应问题解决
标签:cocos2dx android 不响应返回键 返回键无效 cocos2dx3.0
原文地址:http://blog.csdn.net/lumingyuan25/article/details/39925773