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 メソッドを呼び出していません。update メソッドは完全に決定論的です。女性をランダムに動かしたい場合は、moveFemale メソッドを呼び出すか、update メソッドにランダム性を追加します。

これは、オブジェクト指向プログラミングの一般的なルールの例です。同じまたは非常に類似したことを行うように見える 2 つのメソッド (update と moveFemale) を持つことは良くありません。

于 2012-10-28T18:56:30.847 に答える
0

私が見る限り、femaleXとfemaleYがゼロ以外になることはありません。

于 2012-10-28T18:58:08.070 に答える