关于Cocos2d-x-lua的Android原生按键无反应的解决方法

锺威
2023-12-01

最近在开发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。

转载于:https://my.oschina.net/u/2319323/blog/666646

 类似资料: