gpt4 book ai didi

Android keyListener 在模拟器上运行良好,但在设备上运行不佳

转载 作者:行者123 更新时间:2023-11-30 04:45:36 25 4
gpt4 key购买 nike

我正在制作游戏的第一阶段。我有一个可绘制对象,我想在按住方向键箭头的同时在屏幕上四处移动。

我设置了一个自定义 View ,覆盖了 onKeyDown 和 onKeyUp,并且我有一个 switch 语句来识别按下的键。如果按下某个键,则该键的 bool 值变为真。如果松开键,则 bool 值变为假。在另一个例程中,检查 bool 值并更新运动。

问题是,我正在测试的设备是 G2,它有自己独特的键盘,没有方向键,所以我也将 i、j、l、m 作为移动箭头。 (参见 here,单击图片)在 android 模拟器中,我的设置和移动运行良好。但是,在实际设备上,drawable 根本不响应任何按键。我的兄弟正在为我测试这个(我的手机没有键盘)所以我无法在实际设备上调试。

我的问题是:KeyEvent.KEYCODE_* 常量是否因不同的键盘(即 qwerty、非 qwerty 等)而不同?我是否需要在代码中指定要使用的特定键盘(例如键盘映射)?

欢迎任何帮助或建议。谢谢。

如果需要,这里是我从 onKeyDown 调用的 doKeyDown 例程的示例(非常基于 LunarLander 示例源):

boolean doKeyDown(int keyCode, KeyEvent msg) {
synchronized (mSurfaceHolder) {
// Log.d("KeyDown", "The key pressed was:" + keyCode);
// Log.d("KeyDown", "UP: " + mMove_Up + " DOWN: " + mMove_Down + " LEFT: " + mMove_Left +" RIGHT: " + mMove_Right);

mIsDown = false;
boolean handled = false;

switch (keyCode)
{
case KeyEvent.KEYCODE_DPAD_UP:
mMove_Up = true;
handled = true;
break;
case KeyEvent.KEYCODE_I: //Also up
mMove_Up = true;
handled = true;
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
mMove_Down = true;
handled = true;
break;
case KeyEvent.KEYCODE_M: //Also down
mMove_Down = true;
handled = true;
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
mMove_Left = true;
handled = true;
break;
case KeyEvent.KEYCODE_J: // Also left
mMove_Left = true;
handled = true;
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
mMove_Right = true;
handled = true;
break;
case KeyEvent.KEYCODE_L: // Also right
mMove_Right = true;
handled = true;
break;
}


return handled;
}
}

最佳答案

为了让以后遇到相同问题的任何人都能解决这个问题,我解决了这个问题。这是菜鸟/菜鸟的错误。

我所做的就是向我的自定义 View 的构造函数添加两行(我很确定只有第一行是必需的):

setFocusable(true);

setFocusableInTouchMode(true);

显然,这些是 View 能够获取关键命令所必需的(但奇怪的是,在模拟器中没有它们也能正常工作)。已验证使用这些线路在硬件上工作。问题解决了

关于Android keyListener 在模拟器上运行良好,但在设备上运行不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5052278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com