2016-07-12 49 views
2

他們我是盧卡斯和我正在學習java,但我有一個問題:我如何在循環中調用方法keyPressed(KeyListener evt)? 我想將程序一個簡單的2D Java遊戲,這裏是我的keyPressed方法的代碼:如何在循環中調用keyPressed()方法?

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; 
     } 
} 
+1

顯示您當前的代碼 - 您嘗試了什麼?你想達到什麼目的? – nhouser9

+0

好吧,你展示了一些你的代碼。現在告訴我們你真正想要做什麼。你的程序現在做什麼,你想要做什麼? – nhouser9

+0

我想編程一個2D java遊戲(像口袋妖怪一樣的圖形),在這個遊戲中,我可以走路bur我必須每次按下鍵來獲得步行的動畫。我想要知道我可以握住鑰匙,但它不起作用,因爲如果您按住一個鍵例如2秒鐘,那麼玩家在同一方向走約4秒鐘,並且您無法做任何事情 – lukas

回答

0
public class GameLoop implements Runnable { 
    public void run() { 
     //initialization goes here 
     while(running){ 
      processInput(); 
      update(); 
      render(); 
     } 
    } 
    processUpdate() { 
     //here you listen to inputs 
    } 
} 

您可以設置幾個布爾值來跟蹤當前按下的按鍵。例如,如果D被按下,則設置爲movingRight = true;,如果D被釋放,則設置爲movingRight = false;。在更新中,您根據當前按鍵更新您的位置。

然而,一個遊戲循環應該有更多的東西。這只是一個非常基本的模型。

關於遊戲循環:http://gameprogrammingpatterns.com/game-loop.html

+0

好的,謝謝我會嘗試它 – lukas

0

我告訴你必須使用,因爲在這裏你正在使用的程序線程,但如果你啓動一個線程,你可以你什麼都想要的程序仍然能正常 瞭解線程,因爲遊戲都是關於線程

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

謝謝我知道我的答案是複雜的,但閱讀線程教程,因爲在遊戲中,你會在同一時間做很多事情 – Cherif

+0

實現runnable而不是擴展線程。 http://stackoverflow.com/questions/541487/implements-runnable-vs-extends-thread – eldo

+0

您創建一個線程和處理輸入,而不是在輸入上創建線程。 – eldo