0

mousePressed我对和mouseDragged事件有点问题。我正在尝试创建一个太空射击游戏,我希望玩家能够通过按下并在鼠标周围移动来进行射击。我认为我遇到的最大问题在于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

3

只要您拖动鼠标,您就可以playerShoot(e)从方法中手动调用该mouseDragged()方法..

但是,一旦您停止拖动主循环停止,您的mouseDragged()方法就会将您的buttonPressed变量设置为。false

所以不要将 buttonPressed 变量设置为 false。

于 2013-10-27T20:43:18.873 回答
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 回答