[英]Libgdx/Java inheritance issue
我目前正在使用libgdx和java开发一个android项目,并且遇到了一个不确定我要去哪里的问题。 我有一个扩展小部件的基类。 该基类具有一个受保护的成员,该成员在每个派生类的act()方法中设置,但基StatBar类在其自己的draw方法中使用该成员。 问题是,当调用基类方法时,成员不应该为0。 我想念什么?
基类:
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);
}
}
}
派生类:
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表中,但实际上其余的都无关紧要
ui.add(new HealthBar(c, skin));
c是玩家聚会中角色的当前迭代。 满功率时一切显示正常,但不满功率时,它会将条拉空。 调试给我提供了这样一个事实,即当调用基类的draw方法时,currentFillWidth再次为0,而不应为0。 对于基类方法没有从派生类获取更新的成员值的继承,我遗漏了什么? 当我在ui.draw之前的渲染方法中调用ui.act时,Libgdx调用将作用于小部件。 我什至尝试在派生类中重写draw并强制进行super.draw调用。 结果相同。
从中删除括号
currentFillWidth = getWidth() * (character.getCurHP() / character.getMaxHP());
所以
currentFillWidth = getWidth() * character.getCurHP() / character.getMaxHP();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.