GLFW 获取密钥"esc"并关闭窗口

GLFW getkey 'esc' and close window

本文关键字:窗口 esc 获取 密钥 GLFW      更新时间:2023-10-16

我正在尝试获取'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,因为这是逃生密钥的最后一个状态。

那么他们会采取同样的行动吗?可能。您能一直依靠这种情况吗?否。