Java 实体随机运动数组列表

Java 实体随机运动数组列表,java,game-physics,Java,Game Physics,我有一个要随机移动的实体列表。不管我做什么,他们都不会动。这是我的女同学: public class Female extends Entity { static int femaleX = 0; static int femaleY = 0; double walkSpeed = .1f; Random rand = new Random(); int random; int dir; Player player; public Female(int posX, int posY) {

我有一个要随机移动的实体列表。不管我做什么,他们都不会动。这是我的女同学:

public class Female extends Entity {
static int femaleX = 0;
static int femaleY = 0;
double walkSpeed = .1f;
Random rand = new Random();
int random;
int dir;

Player player;

public Female(int posX, int posY) {
    super(posX, posY);

}

public void update() {
    posX += femaleX;
    posY += femaleY;

    moveFemale();

}

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

public Image getFemaleImg() {
    ImageIcon ic = new ImageIcon("res/female.png");
    return ic.getImage();
}

public Rectangle getBounds() {
    return new Rectangle(posX, posY, getFemaleImg().getHeight(null),
            getFemaleImg().getWidth(null));
}

public void moveFemale() {
    random = rand.nextInt(3);
    System.out.println(random);

    if (random == 0) {
        dir = 0;
        posX -= (int) walkSpeed;
    }
}
      }
下面是我如何更新主类中的女性类:

public void actionPerformed(ActionEvent ae) {
    player.update();

    for(int i = 0; i < females.size(); i++){
        Female tempFemale = females.get(i);
        tempFemale.update();
    }
    repaint();
}

角色移动没有问题。为什么会这样?

因为
femaleY
femaleY
都是零。将它们添加到
posX
posY
不会改变这些变量,但是添加一个非零变量就像walkSpeed一样

编辑:对于随机性问题,我不得不暗中尝试,因为我看不到您的所有代码,但也许您没有调用moveFemale方法,这是一种包含随机性的移动方法。更新方法是完全确定的。如果希望女性随机移动,请调用moveFemale方法或向update方法添加随机性


这是面向对象编程中一个通用规则的示例:有两个方法(update和moveFemale)执行相同或非常相似的操作是不好的。

femaleX和femaleY从来都不是非零,据我所知。

如果您愿意,编辑问题以添加新问题。我仍然有相同的问题,代码的随机部分无法工作。随机代码在moveFemale()方法中。哦,对不起,我尝试添加moveFemale();进入更新,但仍然不起作用。。。我尝试设置femaleX=2,然后执行femaleX-=walkspeed,但是实体仍然只是坐在那里。需要明确的是,femaleX-=walkspeed不会修改位置,因为femaleX不是实体的x坐标(posX是)。你还在修改posX吗?我解决了它,显然我忘了,但我在随机代码中将walkSpeed转换为int,所以因为它是.1f,所以四舍五入为0。太谢谢你了!
public void update() {
    posX += femaleX;
    posY += femaleY;

    posX -= walkSpeed;

}