我正在尝试获取“esc”键输入并关闭窗口。我找到了两种方法,第一种是:
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods){
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE);
}
glfwSetKeyCallback(window, key_callback);
while(!glfwWindowShouldClose(window)){
render();
}
另一个是:
glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);
while( glfwGetKey(window, GLFW_KEY_ESCAPE ) != GLFW_PRESS &&
glfwWindowShouldClose(window) == 0 ){
render();
}
我想知道这两种方式是否一样?如果有任何情况,这两者的工作方式会有所不同。
最佳答案
您可以说它们的工作方式有点相同,但请相信 glfwSetKeyCallback
回调。
当您调用 glfwPollEvents
时然后它接受所有未决事件并相应地调用每个相应的回调。问题是 glfwGetKey
只返回指定键的最后状态。
如果您(按时间顺序)有这样的事件流,这就会成为一个问题:
*Press Escape*
*Release Escape*
glfwPollEvents() <- Calls the callback two times
glfwGetKey(window, GLFW_KEY_ESCAPE) <- returns GLFW_RELEASE
按键回调将在按下和释放时调用。然而glfwGetKey
将返回 GLFW_RELEASE
,因为这是转义键的最后状态。
那么他们会采取同样的行动吗?可能吧。你能相信情况总是如此吗?没有。
关于c++ - GLFW getkey 'esc' 并关闭窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43532947/