2014-09-10 64 views
1

在我爲我的OpenGL程序while循環我有一些像這樣讀一的KeyDown只有一次:在while循環(像的KeyListener在Swing)

 if (Keyboard.isKeyDown(Keyboard.KEY_W)) { 
    ... 
    } 

當然現在這個如果得到確認多個每次倍按鈕按下。
有沒有辦法讓它每按一次只檢測一次按鈕?
例如像Java Swing中的KeyListener一樣。

我已經使用elapsedTime變量處理移動速度,也許我可以用它來解決這個問題呢?

+0

設置一個標誌,當你第一次檢測到按鍵,它們雖然如此,忽略了其他任何按鍵相同的類型,直到你發現鑰匙釋放... – MadProgrammer 2014-09-10 21:25:36

+0

嗯,這聽起來像一個計劃。 但是,如果我只想讓if-code每次按下只執行一次,我該如何檢查?因爲while循環仍然繼續,並且每秒運行60次,所以無論使用什麼布爾值,在按下鍵時都會如此,從而執行代碼。如果我將使用一段時間,它會阻止當時運行的其他代碼。或者我錯過了什麼? – 2014-09-10 21:48:09

+1

您需要在呼叫之間保留一個標記以檢查狀態。如果您檢測到該標誌爲真並且該鍵處於關閉狀態,則可以忽略該標誌,否則如果該標誌爲真且該鍵未關閉,則需要重置該標誌。你只想運行邏輯,當標誌是假的,關鍵是關閉 – MadProgrammer 2014-09-10 22:32:17

回答

0

繼從我的問題MadProgrammers意見的指示,我得到這個工作:

if (Keyboard.isKeyDown(Keyboard.KEY_W)) { 
    if(wKeyUp==true) { 
     wKeyUp = false; 

     executeCode(); 
     } 
    } else if (wKeyUp == false && !Keyboard.isKeyDown(Keyboard.KEY_W)) 
     wKeyUp = true; 
1

第一次跟蹤它何時回落,理想情況下,這個布爾值不是在每秒60次的方法的局部範圍內定義的,而是在更高的範圍內。

if (wKeyUp && Keyboard.isKeyDown(Keyboard.KEY_W)) { 
    wKeyUp = false; 
    onNewWKeyPress(); 
} 
else if (wKeyUp == false) 
{ 
    wKeyUp = true; 
} 
+0

我必須嘗試一下,但我相信我明白了! – 2014-09-10 23:16:28

+0

其實我現在注意到這是不正確的。 你的意思是正確的,但代碼是不正確的,我會發布我的代碼,在一個單獨的答案 – 2014-09-11 13:22:14