我试图获得“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();
}
我想知道这两种方式是否相同?如果有任何情况,这两种方式的工作方式不同。
答案 0 :(得分:2)
你可以说它们的工作方式相同,但相信glfwSetKeyCallback
回调。
当您致电glfwPollEvents
时,它会接受所有待处理事件并相应地调用每个相应的回调。问题是glfwGetKey
仅返回指定键的最后一个状态。
如果你(按时间顺序)有一个事件流,这就成了一个问题:
*Press Escape*
*Release Escape*
glfwPollEvents() <- Calls the callback two times
glfwGetKey(window, GLFW_KEY_ESCAPE) <- returns GLFW_RELEASE
关键回调将打赌要求新闻和发布。但是glfwGetKey
将返回GLFW_RELEASE
,因为这是转义键的最后一个状态。
那么他们会采取同样的行动吗?有可能。你能依靠那种情况吗?否。