GLFW getkey' esc'并关闭窗口

时间:2017-04-21 02:29:01

标签: c++ opengl glfw

我试图获得“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();
}

我想知道这两种方式是否相同?如果有任何情况,这两种方式的工作方式不同。

1 个答案:

答案 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,因为这是转义键的最后一个状态。

那么他们会采取同样的行动吗?有可能。你能依靠那种情况吗?否。