当前,在按住所需键时,输入会多次注册。有没有一种方法可以仅在按下键后处理第一个事件,而忽略随后的事件直到释放键?
我正在使用具有以下条件的processInput函数:
if (glfwGetKey(window, GLFW_KEY_LEFT) == GLFW_PRESS) {
currentXPos--;
if (currentXPos < 0)
currentXPos = 0;
}
currentXPos
只是一个受左/右箭头键影响的整数。我有一个等效的currentYPos
整数,它也受上/下箭头键的影响。我需要每次按键增加/减少currentXPos一次。我尝试添加一个初始设置为true的全局布尔值,并在执行时将其设置为false,如下所示:
if (glfwGetKey(window, GLFW_KEY_LEFT) == GLFW_PRESS) {
if (canMove) {
canMove = false;
currentXPos--;
if (currentXPos < 0)
currentXPos = 0;
}
}
if (glfwGetKey(window, GLFW_KEY_LEFT) == GLFW_RELEASE) {
canMove = true;
}
这确实适用于单个键,但是如果我也使用右箭头键实现此功能((用于增加相同的值),则以下功能在第一次发行后会不断返回GLFW_RELEASE,将canMove bool设置为true并最终使其冗余;
if (glfwGetKey(window, GLFW_KEY_RIGHT) == GLFW_RELEASE) {
canMove = true;
}
我尝试使用glfwWaitEvents(),但是当帮助时间超过0.5秒左右时,它仍然会处理多个输入(与在搜索栏/文本编辑器中按住键盘上的任何字符相同的效果)。
答案 0 :(得分:3)
当您只希望一次处理每个键时,最好的解决方案是侦听键回调事件,而不是查询每个帧中的键状态。键回调是一个函数,可以将其挂接到glfw中,并且对于每个键事件都调用一次。
回调应该看起来像这样:
wherearethey[array, "Column"]
然后可以在创建窗口之后的某个位置注册该回调:
Column {{From, To}}
10 {{1,2}}
14 {{7,10}}
17 {{13,14}}
18 {{15,17}}
更多详细信息可以在GLFW Input Guide中找到。