2012-11-15 63 views
0

我對Java比較陌生,而且我正在製作一個遊戲,其中涉及使用箭頭鍵移動對象(您持有它的速度越快)。鍵盤重複延遲意外啓用

下面是這些運動(我使用的KeyListener)代碼:

public void keyPressed(KeyEvent e) { 

    int c = e.getKeyCode(); 

     if(c == KeyEvent.VK_A||c == KeyEvent.VK_LEFT){ 
      PacMan.velX -= PacMan.speed; 
      PacMan.move = true; 
      //PacMan.velY = 0; 
      System.out.println("LEFT"); 
     } 
     if(c == KeyEvent.VK_D||c == KeyEvent.VK_RIGHT){ 
      PacMan.velX += PacMan.speed; 
      PacMan.move = true; 
      //PacMan.velY = 0; 
      System.out.println("RIGHT"); 
     } 
     if(c == KeyEvent.VK_W||c == KeyEvent.VK_UP){ 
      PacMan.velY -= PacMan.speed; 
      PacMan.move = true; 
      //PacMan.velX = 0; 
      System.out.println("UP"); 
     } 
     if(c == KeyEvent.VK_S||c == KeyEvent.VK_DOWN){ 
      PacMan.velY += PacMan.speed; 
      PacMan.move = true; 
      //PacMan.velX = 0; 
      System.out.println("DOWN"); 
     } 
     if(c == KeyEvent.VK_ESCAPE){ 
      if(Main.pause == false){Main.pause = true;Main.move = true;} 
      else if (Main.pause == true){Main.pause = false;Main.move = false;} 
      System.out.println("Pause"); 
     } 
     if(c == KeyEvent.VK_R){ 
      Levels.setLevel(); 
     } 
     if(c == KeyEvent.VK_E){ 
      if(nextLevel){nextLevel = false; 
      Levels.setLevel();} 
     } 

     Main.start = true; 

} 

這工作得很好,直到我感動到Windows 8(從Windows XP)。現在,只要我按住方向鍵,鍵盤重複延遲率就會打開。因此,對象將移動1步然後暫停,然後其他步驟開始(就像在鍵入文本字段時握住字母一樣)。

我想讓鍵盤重複延遲關閉這個遊戲,我不知道該怎麼做。 另外,我希望能夠一次握住多個鍵(所以它可以沿對角線)。

我試圖理解KeyBindings,但遇到了麻煩。

回答

0

我不知道更改代碼中的鍵盤重複延遲,但您可以做的一件事是在keydown事件中開始處理(增加或減少速度)並在keyupevent上停止它。這樣你就不會依賴於鍵盤速率的延遲。

你可以看看 - http://www.gamedev.net/topic/91523-changing-the-typematic-rate-delay/

有點不同的問題,但同樣的解決方案。

+0

謝謝,這是我可以做的。我希望有辦法解決我的具體問題,當然有一種方法可以解決這個問題。我會等待其他人回答:) –

+0

okk :)如果你稍後使用我建議的話,然後在答案上標記。 :) –