我在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;
}
提前谢谢!
答案 0 :(得分:3)
只要您拖动鼠标,就可以从playerShoot(e)
方法手动调用mouseDragged()
方法。
但是,您的mouseDragged()
方法会将buttonPressed
变量设置为false
,因此只要您停止拖动主循环停止。
所以不要将buttonPressed变量设置为false。
答案 1 :(得分:0)
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();
}