2017-04-21 14 views
0

私は 'esc'のキー入力を取得し、ウィンドウを閉じようとしています。私は最初のものがあり、これを行うには、2つの方法を見つけました: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つの方法が同じように動作するかどうかを知りたいですか?何らかの事情がある場合は、これらの2つの動作が異なります。

答えて

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.

関連する問題