Как кэшировать результаты TextureAtlas?

При использовании TextureAtlas для создания спрайта с помощью метода createSprite документация LibGDX говорит: Этот метод использует сравнение строк для поиска области и создает новый спрайт, поэтому результат следует кэшировать, а не вызывать этот метод несколько раз.

Как кэшировать эти результаты? Это просто переменная, которую я создаю для хранения созданного спрайта? Если да, то как мне создать разные копии одного и того же спрайта?


person Scott Kingdon    schedule 11.05.2014    source источник


Ответы (1)


Каждый раз, когда вы используете метод createSprite, создается новый Sprite. Например, обычно у вас будет по одному спрайту на врага. Допустим, у вас есть класс Frog, который является одним из ваших врагов. Это должно выглядеть так (псевдокод):

public class Frog {
    private Sprite sprite;

    public Frog(TextureAtlas atlas) {
        sprite = atlas.createSprite("frog");
    }

    public void update(float deltaTime) {
        // update the sprite position
    }

    public void render(Batch batch) {
        sprite.draw(batch);
    }
}

Теперь у каждого Frog будет свой Sprite. Это необходимо, так как все лягушки могут находиться в разных местах. Позиция будет настроена через Sprite. Вы создадите спрайт только один раз в конструкторе, и все эти спрайты будут использовать одни и те же TextureRegion одного и того же TextureAtlas, что приведет к хорошей производительности, поскольку на видеокарте не будет много переключателей текстур при рендеринге. лягушки.

person noone    schedule 12.05.2014
comment
Спасибо за объяснение! Вы прекрасно ответили на мой вопрос. - person Scott Kingdon; 14.05.2014
comment
@noone, просто любопытно, не лучше ли было бы просто отправить лягушке TextureRegion, а не весь атлас? Или это не имеет значения? - person Green_qaue; 21.04.2016
comment
@ MrCharli3 Нет, это не имеет значения, поскольку это только ссылка на атлас, а не на сам атлас. Ссылка на атлас и ссылка на текстуру занимают всего 4 байта. - person noone; 21.04.2016