2015-02-09 71 views
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()); 

+0

繼承似乎罰款。可能getWidth()或getCurHP()返回0. – Vaiden 2015-02-09 16:14:55

+0

我有libgdx logcat記錄器輸出值和所有通過派生類act方法返回它應該是什麼,就像我說的,當hp已滿時它正確渲染,所以在這一點currentFillWidth =寬度。 – BBeauchene29 2015-02-09 16:18:06

+0

所以在派生類的行爲方法,我得到這樣的輸出:bob的hp = 35/40,curFill = 0。但是,當hp滿時,我得到81的curFill ..... – BBeauchene29 2015-02-09 16:24:53

回答

2

刪除括號所以

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