2012-11-15 65 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 :)如果你稍后使用我建议的话,然后在答案上标记。 :) –