好吧,我正在爲學校製作一款2D側面滾輪遊戲。這幾乎就像馬里奧(當然,這是我完成時的希望)。當我按下右箭頭鍵將我的球員沿着地圖移動時,他移動一次,暫停,然後開始順利移動很多。我認爲這是因爲當你按下一個鍵時所有蘋果筆記本電腦都停頓了,但我不知道如何解決這個問題。有什麼建議?謝謝。如何讓按鍵不停頓?
-1
A
回答
1
一個解決方案是在keypressed方法內部設置boolean keyUP = true
,在keyreleased方法內部設置keyUP = false
。這樣,一旦按鍵被按下,你的遊戲將這個註冊爲"keep moving up"
,直到你釋放密鑰,而不是"Up was pressed move up, up was pressed move up....".
這就消除了輸入時的初始延遲(非常顯着的Linux)。
從我們的遊戲:
private boolean up, down, left, right;
public void keyReleased(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_S:
down = false;
break;
case KeyEvent.VK_W:
up = false;
break;
case KeyEvent.VK_A:
left = false;
break;
case KeyEvent.VK_D:
right = false;
break;
}
}
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_S:
down = true;
break;
case KeyEvent.VK_W:
up = true;
break;
case KeyEvent.VK_A:
left = true;
break;
case KeyEvent.VK_D:
right = true;
break;
1
雖然你還沒有發送的任何代碼段,我可以承擔以下。我認爲你已經實現了按鍵監聽器,當按下按鍵時會執行某些操作。如果用戶仍然按下按鍵,程序會在延遲一段時間後獲得第二個事件,然後開始更快地獲取事件。
這不是你所需要的。您可能應該保持某種應用程序狀態keyIsPressed
,只有在第一次關閉(未按下)鍵時纔會更改該狀態。然後只在鑰匙啓動時關閉此變量。當第一次關機時,開始後臺線程移動你的對象並定期檢查標誌keyIsPressed
以知道何時停止。
好運,成爲馬里奧的競爭對手... :)
0
- 如果這是一個Swing GUI,然後使用鍵綁定,而不是一個按鍵偵聽器,
- 開始按鍵一個Swing計時器
- 並停止在密鑰發佈。
0
所有KeyEvent都是整數,因此您可以創建布爾型[]來存儲KeyEvent中的所有更改。對於Java2D我使用這樣的事情:
import java.awt.KeyEventDispatcher;
import java.awt.event.KeyEvent;
public final class Keyboard implements KeyEventDispatcher {
public static boolean[] keyPressed = new boolean[256];
public static boolean[] keyHold = new boolean[256];
public static boolean[] keyReleased = new boolean[256];
public static void update() {
for (int i=0; i<128; i++) {
keyPressed[i] = false;
keyReleased[i] = false;
}
}
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getID()==KeyEvent.KEY_PRESSED) {
keyHold[e.getKeyCode()] = true;
keyPressed[e.getKeyCode()] = true;
}
else if (e.getID()==KeyEvent.KEY_RELEASED) {
keyHold[e.getKeyCode()] = false;
keyReleased[e.getKeyCode()] = true;
}
return false;
}
}
我在每幀後調用update()。
相關問題
- 1. OpenCV C++如何讓停頓點擊?
- 2. AxAcroPDF吞嚥按鍵,如何讓它停止?
- 3. 如何用javascript停頓html5視頻?
- 4. 如何停止辛格爾頓
- 5. MPMoviePlayerController頻繁停頓
- 6. 捕捉按鍵/讓用戶挑選自己開始/停止鍵
- 7. 如何讓jQuery的按鍵組正按鍵
- 8. 如何讓第一次按鍵
- 9. 如何讓Java Robot按住一個鍵?
- 10. 如何在連續按鍵時停止按鍵重複?
- 11. Powershell的定時器不停頓形式
- 12. 連續循環(不停頓)「X」秒
- 13. SQL Server停頓十分鐘
- 14. Git交互式停頓
- 15. 保持索引停頓Python
- 16. 如何讓懸停在活動按鈕不使用懸停效果?
- 17. 在Ruby中,如何讓終端不要回顯按鍵?
- 18. CSS精靈 - 如何讓懸停按鈕在按下狀態
- 19. 如何讓我的鍵盤輸入/去鍵按鈕工作
- 20. 如何讓AppleScript模擬「1」鍵的按鍵?
- 21. 如何在按鍵上停止javascript(即ESC鍵)
- 22. 如何讓手機在按鍵按下時震動?
- 23. 如何讓html頁面檢測輸入按鍵被按下?
- 24. JavaScript如何讓鍵盤按()通過按鈕的新輸入
- 25. 如何使用「空格鍵或回車鍵」等鍵盤按鍵停止按下按鈕。 C#
- 26. 如何讓DIV(按鈕)100%而不是50%時,沒有其它按鍵
- 27. 想不出如何讓android鍵盤消失,除非後退按鈕是按
- 28. 如何在按下按鍵時暫停/播放Javascript循環?
- 29. as3 - 兩個按鍵按下時如何停止動畫?
- 30. 按Esc鍵停止調試
@ syb0rg:是的,該解決方案使用鍵綁定和Swing Timer。 – 2013-05-05 21:30:20