Я создал простой пользовательский актер в libGdx.LibGdx рендеринг нескольких пользовательских исполнителей.
public class HealthBar extends Actor {
private Texture background;
private Texture bar;
private float max;
private float current;
public HealthBar(Color bgColor, Color barColor) {
Pixmap bgPixmap = new Pixmap(1, 1, Pixmap.Format.RGB565);
bgPixmap.setColor(bgColor);
bgPixmap.drawPixel(0, 0);
background = new Texture(bgPixmap);
bgPixmap.dispose();
Pixmap barPixmap = new Pixmap(1, 1, Pixmap.Format.RGB565);
barPixmap.setColor(barColor);
barPixmap.drawPixel(0, 0);
bar = new Texture(barPixmap);
barPixmap.dispose();
}
@Override
public void draw(Batch batch, float parentAlpha) {
batch.draw(background, getX(), getY(), getWidth(), getHeight());
batch.draw(bar, getX(), getY(), getBarEnd(), getHeight());
}
private float getBarEnd() {
return current/max * getWidth();
}
public void setHealth(float current, float max) {
this.current = current;
this.max = max;
}
public void dispose(){
background.dispose();
bar.dispose();
}
}
I'am рендеринга около 30 этого на стадии 2d в группе.
Проблема в том, что это может стоить мне около 20 кадров в секунду. Оказание такого же количества простых меток не оказывает заметного влияния на производительность. Я что-то пропустил в этом коде? Эти участники добавляются в группу, которая отображается с использованием Stage.
performance with draw() content commented
Благодарим за отличную работу! Я старался, чтобы пакетный сбрасывался только тогда, когда я вызываю метод flush(). Он был протестирован на Android-устройстве на нижнем уровне. На планшете Nvidia Shield держится стабильная 60 кадров в секунду, когда на этом телефоне она имеет 20-30 кадров в секунду. –