2016-07-12 19 views
0

嗨,我有一個問題。我在Java中進行了大約一年的編程,在我的遊戲中沒有任何工作。如果您按下某個鍵,則播放器向前移動,但如果長時間按住該鍵,則播放器會沿相同方向移動太長。 我使用此代碼檢查什麼關鍵球員是緊迫:如何檢測用戶何時真正在Java中發佈密鑰?

private void KeyPressed(java.awt.event.KeyEvent evt) { 

    key = evt.getKeyCode(); 

     if (key == KeyEvent.VK_W) { 

      direction = 1; 

      PlayerMovement(); 
     } 
     if (key == KeyEvent.VK_S) { 

      direction = 2; 

      PlayerMovement(); 
     } 
     if (key == KeyEvent.VK_D) { 

      direction = 3; 

      PlayerMovement(); 
     } 
     if (key == KeyEvent.VK_A) { 
      direction = 4; 
      PlayerMovement(); 

     } 
} 

任何想法? 謝謝

+2

當用戶釋放某個鍵,你會線程G等「KeyReleased」事件。依靠「KeyPressed」事件的頻率只是在尋求麻煩。 – Ordous

+0

您的操作基於KeyEvent,我認爲這太籠統了。您可以單獨使用KeyPressed或KeyTyped(當輸入字符時)。 –

+0

KeyBindins API也是一個好看的地方。 KeyListener經常有焦點問題 – DarkV1

回答

0

使用keyReleased !!!如果你需要移動播放器一步evry鍵按 keyPressed在用戶按下鍵時保持運行

使用線程,因爲在這裏你使用的程序,但如果你啓動一個線程,你可以做任何你想做的事該程序仍然能正常 瞭解線程,因爲遊戲都是關於線程

private class Walk_thread extends java.lang.Thread{ 

public void run(){ 
//call the walk methode here 
PlayerMovement(); 
} 
} 

所以當按鍵被按下創建調用playermovement

if (key == KeyEvent.VK_W) { 

     direction = 1; 
new Walk_thread().start();//here the method run is called 
System.out.println("program will not stop the thread is walking and the program is continued too"); 
    } 
+0

,但是如果我按住一個鍵2秒我的播放器在4個動作之後停止,這個距離很長 – lukas

+0

mmmmmmmm使用線程 – Cherif

+0

使用布爾變量true當按下時,線程將移動播放器並休眠一段時間,當用戶釋放鍵時暫停線程線程非常有用閱讀它 – Cherif

相關問題