我想在用戶按下四個箭頭鍵(或wasd)時在簡單框架上移動字符。只要箭頭鍵被按下,角色應該繼續移動,並且一旦用戶釋放了鍵,該角色應該停止移動。Java - 在KeyPressed事件後立即調用KeyReleased
大多數情況下,這是移動。但是,當快速切換方向時,我會遇到一些奇怪的延遲。看起來,當我按下鍵盤按鈕時,java的keylistener將其解釋爲一個「點擊」鍵,在快速按下並釋放之前,確定該按鈕實際上處於按下狀態。
因此,玩家模型在其動作中有一點點結局。
我解釋正確嗎?這是我的代碼,如果任何人都可以理解這一點。
代碼來處理一個鍵釋放
@Override
public void keyReleased(KeyEvent e)
{
switch(e.getKeyCode())
{
case KeyEvent.VK_W:
case KeyEvent.VK_UP:
case KeyEvent.VK_A:
case KeyEvent.VK_LEFT:
case KeyEvent.VK_S:
case KeyEvent.VK_DOWN:
case KeyEvent.VK_D:
case KeyEvent.VK_RIGHT:
GameController.hero.stopMoving();
break;
case KeyEvent.VK_SPACE:
break;
case KeyEvent.VK_ESCAPE:
break;
}
keyPress = false;
}
我的代碼來處理按鍵
@Override
public void keyPressed(KeyEvent e)
{
keyPress = true;
keyCode = e.getKeyCode();
switch(e.getKeyCode())
{
case KeyEvent.VK_W:
case KeyEvent.VK_UP:
GameController.hero.setSpeedBase(new Point(0,-1));
break;
case KeyEvent.VK_A:
case KeyEvent.VK_LEFT:
GameController.hero.setSpeedBase(new Point(-1,0));
break;
case KeyEvent.VK_S:
case KeyEvent.VK_DOWN:
GameController.hero.setSpeedBase(new Point(0,1));
break;
case KeyEvent.VK_D:
case KeyEvent.VK_RIGHT:
GameController.hero.setSpeedBase(new Point(1,0));
break;
}
}
我希望這是足夠的信息。任何幫助表示讚賞!讓我知道是否有任何澄清我可以做出。有沒有更簡單的方法來做到這一點?
基本測試似乎對我來說工作得很好......也許是一個重複執行問題的可運行演示... – MadProgrammer
我將包含一個可運行的jar演示。謝謝! – 13rave
只是在開玩笑。我不知道如何做到這一點堆棧溢出:( – 13rave