首页 > 代码库 > cocos2dx3.2在android上返回键无法响应问题解决
cocos2dx3.2在android上返回键无法响应问题解决
原因很简单, 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; }}
3. 接下来就不用说了吧。。 所以在android下。 key事件永远不会响应onKeyPressed消息的。
诶。。。。。
cocos2dx3.2在android上返回键无法响应问题解决
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。