Java游戏 - 鼠标按下和鼠标拖动

时间:2013-10-27 20:39:40

标签: java mouseevent

我在mousePressedmouseDragged事件中遇到了一些问题。我正在尝试创建一个太空射击游戏,我希望玩家能够通过按下并在鼠标周围移动来进行拍摄。我认为我遇到的大问题是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;
}

提前谢谢!

2 个答案:

答案 0 :(得分:3)

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

但是,您的mouseDragged()方法会将buttonPressed变量设置为false,因此只要您停止拖动主循环停止。

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

答案 1 :(得分:0)

终于找到了答案! camickr你是对的,我的问题出在playerShoot方法中。 更具体地说,方法参数中的MouseEvent e正在处理船舶的位置以及子弹起始位置,因为它是final我不认为它在方法被称为。现在,船舶的位置会相应地“{手动”更新为xy变量。

现在我的代码是这样的,它就像一个魅力:

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();
}