2014-10-04 105 views
-1

我做了一個遊戲,船正在移動,就像我想要移動他。但我的問題是當我按下按鈕。我的船正在移動,但他必須等待1秒才能開始正確移動。Java KeepPushing遊戲關鍵字

public void keyPressed(KeyEvent e) { 
    int jakiPrzycisk = e.getExtendedKeyCode(); 
    if(jakiPrzycisk == 39) 
    { 
     kierunek="prawo"; 
     czyRuch = true; 
    } 
    if(jakiPrzycisk == 37) 
    { 
     kierunek="lewo"; 
     czyRuch = true; 

    } 
    if(jakiPrzycisk == 38) 
    { 
     kierunek="gora"; 
     czyRuch = true; 

    } 
    if(jakiPrzycisk == 40) 
    { 
     kierunek="dol"; 
     czyRuch = true; 

    } 

在遊戲即時檢查他是否會移動「czyRuch」,我與「kierunek」正確的方向前進。有一種方法可以從密鑰箱中快速讀取數據?

回答

2

請勿使用「幻數」。 37,38,39 40對於讀取你的代碼的人沒有任何意義。

但我的問題是當我按了一個按鈕。我的船正在移動,但他必須等待1秒才能開始正確移動。

然後你有一個沒有發佈的代碼的問題。 Java將立即響應KeyEvent。

但是,如果按住按鍵,則會有一個重複事件的「延遲」。這個延遲取決於操作系統。如果您需要處理重複事件的能力,那麼您應該使用自己的Timer安排這些事件。查看Motion Using the Keyboard瞭解關於此主題以及工作代碼的更多想法。

0

對不起,那是我的錯。現在我可以向你展示一個我遇到問題的例子。

有一個示例代碼

public class KeyTest extends JFrame implements KeyListener { 


long start; 
long end; 
public KeyTest() { 
    super("KeyListener Test"); 
    setPreferredSize(new Dimension(300, 100)); 
    addKeyListener(this); 
    start = System.nanoTime();; 

    pack(); 
    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

@Override 
public void keyPressed(KeyEvent evt) { 
    end = System.nanoTime();; 

    char c = evt.getKeyChar(); 
    System.out.print(c+" "); 
    System.out.println(end-start); 
} 

@Override 
public void keyReleased(KeyEvent evt) { 

} 

@Override 
public void keyTyped(KeyEvent evt) { 

} 

}

和當我按下例如 「S」 任意鍵。我得到了一個

s 810407913 
s 1312851842 
s 1344314575 
s 1377971356 
s 1409969550 
s 1441512603 
s 1475051136 
s 1507228263 

之間的第一個和第二個「s」是很多的區別。這就是爲什麼我的船正在停止一段時間,當我想按任何鍵幾秒鐘,但我不知道如何改變時間間隔