最近在對接Cocos工程,遇到了一個小問題,物理返回鍵點擊不起作用,沒辦法只能自己查原因了。
首先看了下頁面繼承的Cocos2dxActivity,以爲它屏蔽了onBackPressed/onKeyDown,但未發現其重寫。
後來發現其實cocos的頁面是空值surfaceview完成頁面渲染等工作,懷疑是其屏蔽了onKeyDown
找到Desktop/jsb-default/frameworks/cocos2d-x/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxGLSurfaceView.java
的onKeyDown,然後添加代碼 return false; 就可以解除攔截了
@Override
public boolean onKeyDown(final int pKeyCode, final KeyEvent pKeyEvent) {
switch (pKeyCode) {
case KeyEvent.KEYCODE_BACK:
Cocos2dxVideoHelper.mVideoHandler.sendEmptyMessage(Cocos2dxVideoHelper.KeyEventBack);
return false; // 添加代碼,去除攔截,防止android物理返回鍵失效
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() {
Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleKeyDown(pKeyCode);
}
});
return true;
default:
return super.onKeyDown(pKeyCode, pKeyEvent);
}
}