【问题标题】:Android back button does not workAndroid后退按钮不起作用
【发布时间】:2012-12-04 07:01:39
【问题描述】:

我正在使用 cocos2dx 制作一个小游戏,在我的游戏活动中,我提供了以下函数来处理后退按钮。

@Override
 public boolean onKeyDown(int keyCode, KeyEvent event)
 {
     return super.onKeyDown(keyCode, event);
 }

 @Override
 public void onDestroy()
 {
     android.os.Process.killProcess(android.os.Process.myPid());
     super.onDestroy();
 }

按下后退按钮时,我的 logcat 中出现以下警告

无法打开 keycharmap 文件

加载键字符映射文件“/system/usr/keychars/qtouch-touchscreen.kcm.bin”时出错。 hw.keyboards.65538.devname='qtouch-touchscreen'

调用未到达 onKeyDown 或 onDestroy 函数。

请告诉我为什么会出现此警告以及为什么我无法处理 android 后退按钮。

这些函数在我的 java android 项目上运行良好,但在我的 cocos2d-x 项目中却不行

【问题讨论】:

    标签: java android android-activity cocos2d-x


    【解决方案1】:

    这里在Cocos2dxGLSurfaceView.java文件中处理

    改成下面,myActivity 是 cocos2dActicity

            case KeyEvent.KEYCODE_BACK:
                        AlertDialog ad = new AlertDialog.Builder(myActivity)
                        .setTitle("EXIT?")
                        .setMessage("Do you really want to exit?")
                        .setPositiveButton("YES", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                ((Cocos2dxActivity)myActivity).finish();
                            }
                        })
                        .setNegativeButton("NO", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
    
                            }
                        }).create();
                        ad.show();
                return true;
            case KeyEvent.KEYCODE_MENU:
    

    【讨论】:

    • 谢谢,这就是我要找的东西
    • 它没有退出,当我再次运行它时,它会从原来的位置继续。
    • 您究竟是如何访问此处的活动的?
    • @BrandonRomano 请在主活动中构造Cocos2dxGLSurfaceView 实例时将主活动作为参数传递。您可能需要在 Cocos2dxGLSurfaceView.java 中使用一个变量来存储它,在我的例子中是 myActivity。
    【解决方案2】:

    要处理后退按钮按下,您需要重新定义活动的onBackPressed() 方法,而不是这两种方法。

    【讨论】:

    • 我也试过了,但调用也没有达到 'onBackPressed()' 方法。
    • 看来 cocos caprute 背压。检查此消息,也许这就是您要查找的内容cocos2d-x.org/boards/6/topics/5041?r=5059#message-5059
    • 但这只有在我继承我不是的 CCLayer 时才有帮助。有没有其他方法可以解决这场危机。
    【解决方案3】:

    您是否启用了触控功能?如果没有,请启用它,希望它会解决您的问题。

    我认为这是您游戏屏幕上的按钮。

    【讨论】:

    • 不,我指的是安卓手机上的后退按钮。手机上的主页键可以正常使用,但返回键无法使用。
    【解决方案4】:

    只是您的应用程序实现了 onKeyDown 的覆盖方法,

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            // Here to implements for your code.
            Log.d(TAG, "KEYCODE_BACK");
        }
        return super.onKeyDown(keyCode, event);
    }
    

    【讨论】:

    • 是的,我只是重写了 onKeyDown 函数,但它在我的 java android 项目上运行良好。它只是在我的 cocos2d-x 项目中不起作用。
    【解决方案5】:

    这是 Cocos2d-x 版本 3+ 的更新

    这已经得到了简单的回答(并且有效)here

    还有一个稍微不完整的 youtube here

    【讨论】:

      猜你喜欢
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多