我正在研究Java遊戲,並且我遇到了KeyListeners/KeyBinding存在問題。我基本上想要做的是暫時禁用鍵盤/不允許動畫發生時輸入更多的輸入。該動畫是通過更新數據生成的。Java KeyListeners/KeyBinding - 清除緩衝區 - Java遊戲開發
我目前得到的是,我按動畫的關鍵點,動畫開始,然後按另一個鍵來完成其他功能。它被添加到keyboardlistener的堆棧/隊列(?),並在第一個動畫完成時觸發。
我正在使用實現KeyListener的JPanel。
爲了讓代碼的想法:
public void keyPressed(KeyEvent arg0) {
//Prevents Repeated keys
pressed.add(arg0);
if (pressed.size() == 1) {
int key = ((KeyEvent) pressed.toArray()[0]).getKeyCode();
if (key == KeyEvent.VK_ENTER) {
doSomeAnimation();
} else if (key == KeyEvent.VK_SPACE) {
doADifferentAnimation();
}
Update();
}
}
事情我已經嘗試:
1)設置可聚焦(假)在JPanel中調用動畫之前。然後設置可調焦(真),並在焦點完成時抓住焦點。
2)使用布爾值來跟蹤動畫發生的時間。
3)使用密鑰綁定。
無論我用什麼方法,我總是會遇到這樣的問題,即在動畫發生時我仍然會從鍵盤輸入內容。然後,一旦該動畫完成,它會轉到堆棧/隊列(?)中的下一個元素並處理它。另外,這些動畫需要多次出現(所以使用一組布爾值來驗證它是否已經被執行並不會有幫助)。
因此,如果您有任何想法或幫助(或指向我的地方),將不勝感激。
一些額外信息:Java 1.6,IDE Eclipse,MVC結構。 (有問題的是控制器/型號)
+1 plus http://download.oracle.com/javase/tutorial/uiswing/misc/keybinding.html – mKorbel
@mKorbel:好的觀察結果; [示例](http://stackoverflow.com/questions/3158254/how-to-replace-the-awt-eventqueue-with-own-implementation)突出了當[鍵綁定](http:///download.oracle.com/javase/tutorial/uiswing/misc/keybinding.html)未使用。 – trashgod
我沒有使用計時器,但感謝您幫助我。您提供的這些鏈接非常有用。 :)我通過使用替換eventqueue和設置可調焦的混合來解決問題。 – aoi