2017-08-15 83 views
0

在我當前的LWJGL應用程序中,我使用了GLFW窗口輸入處理程序,我已經建立了一個名爲Keyboard.java的類來處理擴展GLFWKeyCallback。我已經正確設置了我的鍵盤輸入類,但是當我點擊某個鍵時,如果我不點擊(如果速度夠快),那麼它會註冊爲多次點擊。我已經提出下面的一些文檔:GLFW鍵盤輸入寄存器作爲多個點擊

鍵盤類

public class Keyboard extends GLFWKeyCallback { 

    //Variables 
    public static boolean keys[] = new boolean[65536]; 

    @Override 
    public void invoke(long window, int key, int scancode, int action, int mods) { 

     keys[key] = action == GLFW_PRESS; 

    } 

} 

實施

public static void handleInput() { 
    if (Keyboard.keys[GLFW_KEY_SPACE]) { 
     System.out.println("Space"); 
     glfwPollEvents(); 
    } 
} 

上述方法在主遊戲循環實現,並且被調用一次一幀。

結果

初始化LWJGL版本:3.1.2建立29

空間

空間

空間

空間

以上:「S每當我點擊空間時應該輸出「節奏」,但是當我點擊它時比較快,然後我得到了許多「空間」的上述結果。

結論:無論您持有多久,點擊空間是否可以僅註冊一次?謝謝

回答

1

在您的handleInput()函數中,您正在測試以查看Keyboard.keys[GLFW_KEY_SPACE]是否爲真,如果是,則執行該語句。問題在於,當你停止觸及空間時,這個測試只會變成錯誤,這可能需要幾秒鐘的時間。

我的建議:一旦你測試了Keyboard.keys[GLFW_KEY_SPACE],就把它弄錯了。

public static void handleInput() { 
    if (Keyboard.keys[GLFW_KEY_SPACE]) { 
     Keyboard.keys[GLFW_KEY_SPACE] = false; 
     System.out.println("Space"); 
     glfwPollEvents(); 
    } 
} 
+0

感謝您的回覆,但我已經設法解決這個問題。然而,這是一個更容易的方法。謝謝。 –