我已经设置了一组代码,使用InputListener.keyDown测试按下的键,并使用这些键代码显示击键提示。然而,在非QWERTY键盘布局(如Dvorak或Colemak)上,通过Input.Keys.toString(keycode)获取这些键码并不返回按下键将显示的实际字符。(例如,在我的QWERTY-硬件键盘上按下'E‘键将总是返回'E’的键码,而不是当我使用Colemak键盘布局时返回'F‘的键码)
是否有一种方法可以使用密钥代码来获取按下该键时将输入的实际值?
使用keyTyped可以给出正确的字符值,但是将所有代码从keyDown切换到keyTyped将是一个很大的重构。
发布于 2022-03-25 20:13:56
修好了!最后,我在可能的情况下使用GLFW.glfwGetKeyName和DefaultLwjgl3Input.getGlfwKeyCode来获取密钥名,而在其他情况下则返回到只使用Input.Keys.toString (特别是非字母数字键)。
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则使用本地化键。
https://stackoverflow.com/questions/70309733
复制相似问题