0

mousePressedとイベントに少し問題がありmouseDraggedます。Space Shooter ゲームを作成しようとしていますが、プレイヤーがマウスを押して移動することで射撃できるようにしたいと考えています。私が抱えている大きな問題は、mouseDraggedイベントにあると思います。より具体的には、マウスボタンを押すmousePressedと呼び出され、完全に実行され、マウスを動かすと(マウスを押したままにする)mouseDragged、正常に動作しますが、マウスの動きを止めると(注)押したままにします) 宇宙船が発砲を停止し、その理由がわかりません。

これはコードです:

private void initShootingThread(final MouseEvent e) {
    new Thread() {
        public void run() {
            do {
                playerShoot(e);
            } while (buttonPressed);
        }
    }.start();
}

// // PLAYER SHOOTING EVENTS ////
public void mouseClicked(MouseEvent e) {
    playerShoot(e);
}

public void mousePressed(MouseEvent e) {
    buttonPressed = true;
    initShootingThread(e);
}

public void mouseDragged(MouseEvent e) {
    buttonPressed = false;
    playerShoot(e);
}

public void mouseReleased(MouseEvent e) {
    buttonPressed = false;
}

前もって感謝します!

4

2 に答える 2

0

ついに答えが見つかりました!camickr あなたは正しかった、私の問題はplayerShoot方法にありました。より具体的にMouseEvent eは、メソッドのパラメーターから、船の位置と弾丸の開始場所を処理してfinalいたため、メソッドが呼び出されたときに正しく更新されなかったと思います。x船の位置は、変数に従って「手動で」更新されyます。

今、私のコードは次のようなもので、魅力的に機能します:

private void initShootingThread() {
    new Thread() {
        public void run() {
            do {
                playerShoot();
            } while (buttonPressed);
        }
    }.start();
}

// // PLAYER SHOOTING EVENTS ////
public void mouseClicked(MouseEvent e) {
    playerShoot(e);
    x = e.getX();
    y = e.getY();
}

public void mousePressed(MouseEvent e) {
    buttonPressed = true;
    initShootingThread();
    x = e.getX();
    y = e.getY();
}

public void mouseDragged(MouseEvent e) {
    playerShoot();
    x = e.getX();
    y = e.getY();
}

public void mouseReleased(MouseEvent e) {
    buttonPressed = false;
}

public void mouseMoved(MouseEvent e) {
    x = e.getX();
    y = e.getY();
}
于 2013-10-28T21:18:09.413 に答える