有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java静态变量把一切都搞砸了

可能是一个非常基本的Java问题,但我在实体类中有两个变量:

public class Entity {

int posX;
int posY;

public Entity(int posX, int posY){
    this.posX = posX;
    this.posY = posY;
}

public void update(){

}

public void draw(Graphics2D g2d){

}

}

我的玩家和敌人类扩展它,然后渲染两个变量。像这样:

public void draw(Graphics2D g2d) {
    g2d.drawImage(getPlayerImg(), posX, posY, null);
    if (showBounds == true) {
        g2d.draw(getBounds());
    }
}

我需要像这样访问这些变量(这在我的敌人类中):

public static void moveFemale(){
    if(posX <= Player.posX){
        //do AI code
    }
}

posX和玩家。posX抛出一个错误,说我需要更改实体中posX的修饰符。从java到静态。但当我将其更改为静态时,敌人类的渲染器停止工作,敌人不再显示在屏幕上。我怎样才能创建一个变量来实现这一点:

public static void moveFemale(){
    if(posX <= Player.posX){
        //do AI code
    }
}

还把我的敌人交出来?对不起,这墙的文字和任何答案将帮助很多


共 (2) 个答案

  1. # 1 楼答案

    我认为,您应该从方法moveFemale中删除修饰符static

     public void moveFemale(){
        if(posX <= Player.posX){
            //do AI code
        }
      }
    
  2. # 2 楼答案

    moveFemale方法是静态的,因此它需要知道要移动哪个。要么传递对玩家的引用,要么找到一个可以使移动方法成为玩家的非静态成员方法