2017-04-21 114 views
0

我試圖獲得'esc'的關鍵輸入並關閉窗口。我發現兩種方法可以做到這一點,第一個是:GLFW getkey'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(); 
} 

我想知道,如果這兩種方式的工作原理相同?如果有任何情況,這兩種工作方式不同。

回答

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,因爲這是轉義密鑰的最後一個狀態。

那麼他們會採取相同的行爲?有可能。你能依靠這種情況嗎? No.