1

Javaで複数のキーを押す方法を検索しようとしましたが、見つけたすべての解決策は、すべてのキーが押されていることを前提としています。

読み込んだ画像がキャンバスに沿って移動する非常に単純なゲームを作成しています。左、右、および上矢印キーを使用して、左右に移動し、ジャンプしたい。私の問題は、左右のキーを押すと、完全に機能することです。しかし、上矢印キーを押すと、ジャンプして一斉に動かなくなります。

押されたすべてのキーの配列リストと、押されたすべてのキーをチェックして特定のジョブを実行する run() メソッドがあります。しかし、Java は最後に押したキーのみを記憶し、上矢印キーを押しても run() メソッドを呼び出しません。

あなたは私に何を提案しますか?スレッドを試してみましたが、コードが混同されています (または、何か間違ったことをしたのでしょうか?)。

これが私のコードです:

public class Moving implements KeyListener {
    ProgramClass bg; //this is another class
    Set<Integer> pressed = new HashSet<Integer>();

    public Moving (ProgramClass aa) {
        bg = aa;
    }

    public void keyPressed (KeyEvent ae) {
        pressed.add(ae.getKeyCode());
        run();
    }

    public void keyTyped (KeyEvent ae) {
    }

    public void keyReleased (KeyEvent ae) {
        pressed.remove (ae.getKeyCode());
        if (bg.left==false) {
            if (ae.getKeyCode()==KeyEvent.VK_UP) {
                bg.yy -=40;
            }
        }
        run();
    }

    public void run () {
        if (bg.left==true) {
            if (pressed.contains(KeyEvent.VK_A)) {}

            if (pressed.contains(KeyEvent.VK_D)) {
                if (bg.pic==true)
                    bg.pic = false;
                else
                    bg.pic = true;

                if (bg.x==-550)
                    bg.x = -2;
                else
                    bg.x -= 2;
            }
        }

        if (bg.left==false) {
            if (pressed.contains(KeyEvent.VK_LEFT)) {
                if (bg.pic==true)
                    bg.pic = false;
                else
                    bg.pic = true;

                if (bg.x==550)
                    bg.x = 2;
                else
                    bg.x += 2;
            }

            if (pressed.contains(KeyEvent.VK_RIGHT)) {}

            if (pressed.contains(KeyEvent.VK_UP)) {
                bg.yy -=40;
            }
        }
    }
}

ありがとう!

4

0 に答える 0