0
我目前正在使用libgdx和java工作一個android項目,並遇到了一個問題,我不知道我哪裏出錯了。我有一個擴展小部件的基類。這個基類有一個在每個派生類的act()方法中設置的受保護成員,但是基類statBar類在它自己的draw方法中使用該成員。問題是,當基類方法被調用時,成員應該不是0。我錯過了什麼?Libgdx/Java繼承問題
基類:
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。我遺漏了有關基類方法沒有從派生類中獲取更新成員值的繼承?在ui.draw之前,在我的渲染方法中調用ui.act時,Libgdx調用將作用於窗口小部件。我甚至試圖在派生類中重寫繪圖並強制執行super.draw調用。相同的結果。從
currentFillWidth = getWidth() * (character.getCurHP()/character.getMaxHP());
繼承似乎罰款。可能getWidth()或getCurHP()返回0. – Vaiden 2015-02-09 16:14:55
我有libgdx logcat記錄器輸出值和所有通過派生類act方法返回它應該是什麼,就像我說的,當hp已滿時它正確渲染,所以在這一點currentFillWidth =寬度。 – BBeauchene29 2015-02-09 16:18:06
所以在派生類的行爲方法,我得到這樣的輸出:bob的hp = 35/40,curFill = 0。但是,當hp滿時,我得到81的curFill ..... – BBeauchene29 2015-02-09 16:24:53