我使用GLFW作为键盘输入,但是处理速度太快,因此我在单个按键上的布尔开关被更改了10次,因为输入是处理每帧的。我只需要一个空格键就能切换状态。我的当前代码如下:
if (glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS)
{
show = !show;
}有更好的方法吗?
发布于 2018-09-25 07:16:04
是。glfwGetKey用于连续键输入。GLFW手册列出glfwSetKeyCallback作为更好的替代方案,如果您希望一次性通知键按.
因此,对于您的情况,应该是这样的:
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
if (key == GLFW_KEY_SPACE && action == GLFW_PRESS)
show = !show;
}如果出于任何原因不想使用此方法,则可以自己实现类似的方法。您将需要一个表示键状态的布尔值(或值数组)。然后,在输入处理中,必须只对按钮状态的更改作出反应,如下所示:
bool spacePressed;
// in handling
bool spaceCurrentlyPressed = glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS;
if (!spacePressed && spaceCurrentlyPressed) { // wasn't before, is now
show = !show;
}
spacePressed = spaceCurrentlyPressed;发布于 2018-09-25 07:23:08
我再次推荐使用GLFWs 键回调,而不是自己获取每个帧的关键状态。这样,您将只收到一个按键和一个按键释放事件的每个键。
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
if(action == GLFW_RELEASE) return; //only handle press events
if(key == GLFW_KEY_SPACE) show = !show;
}
//in main or init
glfwSetKeyCallback(window, key_callback);https://stackoverflow.com/questions/52492426
复制相似问题