Libgdx/Java继承问题

Libgdx/Java inheritance issue

我目前正在使用 libgdx 和 java 进行 android 项目,并且 运行 遇到了一个我不确定我在哪里的问题出错了。我有一个扩展小部件的基础 class。这个基础 class 有一个受保护的成员,它在每个派生 class 的 act() 方法中设置,但基础 statBar class 在它自己的 draw 方法中使用该成员。问题是,当调用 base class 方法时,成员为 0,而它不应该是。我错过了什么?

基础class:

public abstract class statBar extends Widget {
  protected Color color;
  protected Color darkColor;
  protected Combatant character;

  protected float currentFillWidth;
  private Drawable fullBar;
  privates Drawable emptyBar;

  public statBar(Color color, Combatant character, Skin skin){
    this.character = character;
    this.color = color;
    this.darkColor = color.cpy().mul(0,0,0,.2f);
    this.fullBar = skin.newDrawable("statBar", this.color);
    this.emptyBar = skin.newDrawable("statBar", this.darkColor);
  }

  @Override
  public void draw(Batch batch, float parentAlpha) {
    float x = getX();
    float y = getY();
    float width = getWidth();
    float height = getHeight();

    // draw current fill box
    fullBar.draw(batch, x, y, currentFillWidth, height);

    // if not full, draw empty bar portion
    if (currentFillWidth < width) {
      emptyBar.draw(batch, x+currentFillWidth, y, width-currentFillWidth, height);
    }
  }
}

派生 class:

public class HealthBar extends statBar {
  public HealthBar(Combatant character, Skin skin) {
    super(Color.RED, character, skin);
  }

  @Override
  public void act(float delta) {
    super.act(delta);
    currentFillWidth = getWidth() * (character.getCurHP() / character.getMaxHP());
  }
}

最后这就是我实例化栏的方式,它被添加到我屏幕上更大的 GUI table,但实际上其余的都是无关紧要的

ui.add(new HealthBar(c, skin));

c 是玩家队伍中角色的当前迭代。满血时一切都显示正常,但当你没有满血时,它会把栏画成空的。调试告诉我一个事实,当调用 base class draw 方法时,currentFillWidth 再次为 0,而它不应该为 0。关于基 class 方法未从派生 class 获取更新成员值的继承,我遗漏了什么?当我在 ui.draw 之前在渲染方法中调用 ui.act 时,Libgdx 调用作用于小部件。我什至尝试在派生的 class 中覆盖绘制并强制调用 super.draw。相同的结果。

中删除括号
currentFillWidth = getWidth() * (character.getCurHP() / character.getMaxHP());

所以

currentFillWidth = getWidth() * character.getCurHP() / character.getMaxHP();