1

キーが押されたときに適切に通知を受ける方法を理解するのに問題があります。複数のkeyPressedキーを処理する場合、最初に押されたキーに対してメソッドが再度呼び出されることはないようです。

例:右矢印キーを押したままにすると、繰り返し呼び出されます (テストを印刷し続けます)。しかし、右矢印キーを押してからスペースキーを1回押し、右矢印キーを押したままにすると、スペースキーが離されるとすぐにkeyPressed()メソッドが呼び出されないようです。(何も印刷されていません)。

これは私のコードがどのように見えるかです:

public void keyPressed(KeyEvent e) {

    System.out.println("test");

    switch (e.getKeyCode()) {

        case KeyEvent.VK_LEFT:
            guy.moveLeft();
            break;

        case KeyEvent.VK_RIGHT:
            guy.moveRight();
            break;

        case KeyEvent.VK_SPACE:
            guy.jump();
            break;
    }
}
4

1 に答える 1

3

キーボード フォーカスのすばらしい世界へようこそ。

コンポーネントにをアタッチしたと仮定するとKeyListener...

コンポーネントがキー イベントを受け取るには、フォーカス可能で、キーボード フォーカスを持っている必要があります。これにより、ゲームなどに使用したい場合、非常に不安定になります。

代わりに、キー バインディング APIを利用する必要があります。キーアクションのコーディングを容易にするだけでなく、個々のイベントをトリガーするフォーカス条件を指定できます。

于 2013-02-21T03:57:08.127 に答える