0

私はJavaに比較的慣れていないので、矢印キーでオブジェクトを移動するゲームを作成しています(長押しすると速くなります)。

これらの動きのコードは次のとおりです (キーリスナーを使用しています)。

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 を理解しようとしましたが、うまくいきませんでした。

4

1 に答える 1

0

コードからキーボードの繰り返し遅延を変更することについてはわかりませんが、できることの 1 つは、keydown イベントで処理を開始 (速度を増減) し、keyupevent で停止することです。そうすれば、キーボード レートの遅延に依存しなくなります。

あなたは見ることができます - http://www.gamedev.net/topic/91523-ching-the-typematic-rate-delay/

少し異なる問題ですが、同じ解決策です。

于 2012-11-15T12:05:33.743 に答える