最近在开发Android电视游戏,需要用到遥控器上的方向键和返回键等监听,然后发现AppActivity的父类并没有重写onKeyDown方法,遂找到了Cocos2d-x中android项目的依赖项目libcocos2dx中的一个类,Cocos2dxGLSurfaceView
该类中有重写onKeyDown,并且我需要的几个键的返回值居然是true,代表事件到此已被处理,不再继续传递,这也导致了我在AppActivity类中的onKeyDown无法接收到那几个事件
很简单的一个处理方法,就是将Cocos2dxGLSurfaceView中的onKeyDown方法的返回值改为false,方可被AppActivity中的onKeyDown接收到。
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() {
Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleKeyDown(pKeyCode);
}
});
return false;//将此处改为false
default:
return super.onKeyDown(pKeyCode, pKeyEvent);
}
}
注:本人使用的Cocos2d-x版本为3.4,开发脚本语言为lua。