将 libgdx int 键码转换为非 QWERTY 字符
Convert libgdx int keycode to non-QWERTY char
我设置了一堆代码,使用 InputListener.keyDown
测试按下的键,并使用这些键码显示击键提示。但是,在非 QWERTY 键盘布局(如 Dvorak 或 Colemak)上,通过 Input.Keys.toString(keycode)
获取这些键码不会 return 通过按键显示的实际字符。 (例如,在我的 QWERTY 硬件键盘上按 'E' 键将始终 return 'E' 的键码,而不是 returning 'F' 的键码当我使用 Colemak 键盘布局时)
有没有办法使用键码来获取按下该键时键入的实际值?
使用 keyTyped
给我正确的字符值,但是将所有代码从 keyDown 切换到 keyTyped 将是一个巨大的重构。
已修复!我最终使用 GLFW.glfwGetKeyName
和 DefaultLwjgl3Input.getGlfwKeyCode
尽可能地获取键名,并在其他情况下退回到仅使用 Input.Keys.toString
(具体来说,non-alphanumeric 键)
String keyName = GLFW.glfwGetKeyName(DefaultLwjgl3Input.getGlfwKeyCode(keystroke), 0);
if(keyName != null && !keyName.equals("")) {
return keyName.toUpperCase();
}
return Input.Keys.toString(keystroke);
值得注意的是,这是特定于 LWJGL3 后端的。 LWJGL3 使用物理键盘布局(因此如果您使用 keyDown 检查 WASD,在 AZERTY 键盘布局上它将检查 ZQSD,相同位置的键),而 LWJGL2 使用本地化键。
我设置了一堆代码,使用 InputListener.keyDown
测试按下的键,并使用这些键码显示击键提示。但是,在非 QWERTY 键盘布局(如 Dvorak 或 Colemak)上,通过 Input.Keys.toString(keycode)
获取这些键码不会 return 通过按键显示的实际字符。 (例如,在我的 QWERTY 硬件键盘上按 'E' 键将始终 return 'E' 的键码,而不是 returning 'F' 的键码当我使用 Colemak 键盘布局时)
有没有办法使用键码来获取按下该键时键入的实际值?
使用 keyTyped
给我正确的字符值,但是将所有代码从 keyDown 切换到 keyTyped 将是一个巨大的重构。
已修复!我最终使用 GLFW.glfwGetKeyName
和 DefaultLwjgl3Input.getGlfwKeyCode
尽可能地获取键名,并在其他情况下退回到仅使用 Input.Keys.toString
(具体来说,non-alphanumeric 键)
String keyName = GLFW.glfwGetKeyName(DefaultLwjgl3Input.getGlfwKeyCode(keystroke), 0);
if(keyName != null && !keyName.equals("")) {
return keyName.toUpperCase();
}
return Input.Keys.toString(keystroke);
值得注意的是,这是特定于 LWJGL3 后端的。 LWJGL3 使用物理键盘布局(因此如果您使用 keyDown 检查 WASD,在 AZERTY 键盘布局上它将检查 ZQSD,相同位置的键),而 LWJGL2 使用本地化键。