键盘重复延迟意外打开

时间:2012-11-15 08:23:53

标签: windows-8 keyboard delay keylistener key-bindings

我对java和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,但却遇到了麻烦。

1 个答案:

答案 0 :(得分:0)

我不知道从代码更改键盘重复延迟,但您可以做的一件事是在keydown事件上开始处理(增加或减少速度)并在keyupevent上停止它。这样你就不会依赖键盘速率延迟。

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

一个不同的问题,但同样的解决方案。