我正在尝试为我的游戏编写鼠标侦听器。基本思想是我使用鼠标侦听器(不断更新)跟踪光标的 x 和 y 坐标并相应地更改播放器的位置。我决定使用 MouseMotionListener 中的 mouseMoved 方法来完成此操作。我应该在屏幕上按一次以启动玩家的鼠标跟踪,然后按一次停止。但是,似乎我的变量不会在 mouseMoved 内更新。如何更新方法内的变量?
private Handler handler;
public static int vel=5;
boolean pressed = false;
int run=0;
int x;
int y;
public mouseListener(Handler handler){
this.handler = handler;
}
public void mouseClicked(MouseEvent event) {
run++;
}
public void mouseMoved(MouseEvent event) {
this.x = event.getX() - 16;
this.y = event.getY() - 16;
System.out.println("Click"+run);
int trun=run;
if(trun%2==1) {
System.out.println(x+" "+y);
updateField(x,y);
}
}
public void updateField(int tempx, int tempy) {
int x=tempx;
int y=tempy;
for(int i=0; i<handler.object.size();i++){
GameObject tempObject = handler.object.get(i);
if(tempObject.getID()== ID.Player){
if(x>tempObject.getX()) {
tempObject.setVelX(vel);
}
if(x<tempObject.getX()) {
tempObject.setVelX(-1*vel);
}
if(x==tempObject.getX()) {
tempObject.setVelX(0);
}
if(y>tempObject.getY()) {
tempObject.setVelY(vel);
}
if(y<tempObject.getY()) {
tempObject.setVelY(-1*vel);
}
if(y==tempObject.getY()) {
tempObject.setVelY(0);
}
if(pressed==false) {
tempObject.setVelY(0);
tempObject.setVelX(0);
}
}
}
}
最终结果是,我应该能够在屏幕上单击一次,并且玩家应该开始跟随我的鼠标。然后我应该能够再次单击以将其关闭。相反,x 和 y 值会更新,但玩家不会移动,并且 on/off 变量不会在 mouseMoved() 内更新。