0

我正在尝试为我的游戏编写鼠标侦听器。基本思想是我使用鼠标侦听器(不断更新)跟踪光标的 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() 内更新。

4

0 回答 0