0

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

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();
}

如果我做这样的事情(在女性更新方法中):

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

    posX -= walkSpeed;

}

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

4

2 回答 2

1

因为femaleXfemaleY为零。将它们添加到这些变量中posXposY不会更改这些变量,但是添加一个像 walkSpeed 这样的非零变量会。

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

这是面向对象编程中一般规则的一个示例:让两个方法(update 和 moveFemale)看起来做相同或非常相似的事情是很糟糕的。

于 2012-10-28T18:56:30.847 回答
0

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

于 2012-10-28T18:58:08.070 回答