将 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.glfwGetKeyNameDefaultLwjgl3Input.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 使用本地化键。