2015-02-09 4 views
0

В настоящее время я работаю над проектом android, используя libgdx и java, и столкнулся с проблемой, что я не уверен, где я ошибаюсь. У меня есть базовый класс, который расширяет виджет. Этот базовый класс имеет защищенный член, который устанавливается в методе act() для каждого производного класса, но базовый класс statBar использует элемент в своем собственном методе рисования. Проблема в том, что при вызове метода базового класса член равен 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 - текущая итерация персонажа на стороне игрока. Все отображается отлично, когда на полной скорости hp, но когда ваш не заполнен, он выводит панель пустым. Отладка дает мне тот факт, что при вызове метода рисования базового класса currentFillWidth снова 0, когда этого не должно быть. Что мне не хватает в наследовании, что метод базового класса не получает обновленные значения элементов из производного класса? Вызов Libgdx действует на виджет, когда я вызываю ui.act в моем методе визуализации перед ui.draw. Я даже попробовал переопределить ничью в производном классе и заставить вызов super.draw. Те же результаты.

+0

Наследование кажется прекрасным. Возможно, getWidth() или getCurHP() return 0. – Vaiden

+0

У меня были выходные значения loggat loggat loggat, и все через метод act производного класса возвращает то, что он должен, и, как я уже сказал, когда hp заполнен, он корректно отображается так в этой точке currentFillWidth = ширина. – BBeauchene29

+0

Итак, в методе act производного класса я получаю вывод следующим образом: bp's hp = 35/40, curFill = 0. Но когда hp заполнен, я получаю curFill из 81 ..... – BBeauchene29

ответ

2

Удалить скобка из

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

Так

currentFillWidth = getWidth() * character.getCurHP()/character.getMaxHP(); 
Смежные вопросы