我正在用java和LWJGL3开发游戏。但我不明白如何解决我的问题,我试图在互联网上搜索,但LWJGL的信息很少,我找不到任何GLFW。
比方说,我有一个带4个按钮的菜单(新游戏,选项,积分,退出)和计数变量,以了解选择了哪一个。每次按下向上箭头键,我想从选择中减去一个,选择前一个,向下箭头键相同,但我想添加一个。
问题如下:如果在第0帧中我按箭头键添加了计数变量,但在下一帧中仍然按下了键,因此再次添加。我不知道如何修复此问题,我尝试将GLFW_PRESS更改为GLFW_RELEASE,但我希望在按下该键时执行操作。
if ((glfwGetKey(window, GLFW_KEY_UP) == GLFW_REPEAT) && select > 0) {
button[select].toggleSelect();
select--;
button[select].toggleSelect();
}
if ((glfwGetKey(window, GLFW_KEY_DOWN) == GLFW_REPEAT) && select < button.length) {
button[select].toggleSelect();
select++;
button[select].toggleSelect();
}
我知道这段代码可以抛出数组索引超出范围的异常
答案 0 :(得分:0)
您应该注册一个关键回调:
private GLFWKeyCallback keyCallback;
// ...
keyCallback = new GLFWKeyCallback() {
@Override
public void invoke(long window, int key, int scancode, int action, int mods) {
if (action == GLFW_PRESS) {
if (key == GLFW_KEY_UP && /*...*/) {
// ...
}
if (key == GLFW_KEY_DOWN && /*...*/) {
// ...
}
}
}
}
glfwSetKeyCallback(window, keyCallback);
每次生成键事件时都会调用invoke()
方法。 action
参数可以带三个值:
GLFW_PRESS
GLFW_REPEAT
之后,当按键仍被按下时GLFW_RELEASE
当密钥浪费刚刚发布时虽然glfwGetKey()
仅返回GLFW_PRESS
或GLFW_RELEASE
,但关键回调仅在第一次按下按键时使用GLFW_PRESS
,之后仅使用GLFW_REPEAT
,允许您可以区分按下该键的第一帧和后续帧。