Итак, в моей игре у меня более 32000 изображений (размер: 32x32). Как сохранить это количество изображений? Что может быть лучше: загрузить эти изображения в виде отдельных файлов или как один большой атлас текстуры?Libgdx texture atlas vs files
ответ
Когда вы загружаете текстуру (изображение) в своей игре, загружая текстуру в графический процессор.
Скажем, у вас есть 3200 изображений, и вы загружаете их отдельно, что означает 3200 текстур, загруженных на графический процессор. Это суровое и будет насыщать памятью.
Теперь позвольте мне объяснить, что такое TextureRegion
TextureRegion
, занимает площадь от Texture
в соответствии с размерами вы предоставляете, то преимущество, что это то, что вам не придется снова и снова загружать текстуры и Большим преимуществом является то, что вам не нужно загружать каждую текстуру на графический процессор, так как вы можете делать это напрямую, загружая одну большую текстуру и извлекая из нее субрегионы (TextureRegions).
Теперь, поскольку вы хотите использовать TextureRegions
, будет трудно узнать размеры каждого дополнительного изображения, чтобы загрузить их из листа текстуры. Так что мы делаем, мы упаковываем Textures в более крупную текстуру, используя TexturePacker (приложение), которая затем создает файл .pack
. Он упакует каждую текстуру в одно изображение и создаст файл .pack. Теперь, когда вы загружаете файл .pack, он загружается с использованием TextureAtlas
класс Например, представьте себе файл пакета pokemon, в который есть все покемоны.
TextureAtlas pokemonFrontAtlas = new TextureAtlas(Gdx.files.internal("pokemon//pokemon.pack"));
Теперь вы упакованы 3200 файлов с помощью Texture Packer и вы хотите загрузить изображение (Texture
), который имеет имя файла как «SomePokemon».
Теперь, чтобы получить конкретную TextureRegion от него, вы
pokemonFrontAtlas.findRegion("SomePokemon")
findRegion (имя String) возвращает вам textureRegion от TextureAtlas
.
A TextureAtlas
класс содержит коллекцию класса AtlasRegion
, которая расширяет класс TextureRegion
.
См Javadocs для более подробной информации TextureAtlas
Окей, но я не понимаю одну вещь. Является ли весь этот атлас текстуры в моей памяти или просто частью, загруженной в текстуры ☺? – Dragomirus
Когда вы загружаете атлас текстуры, он все еще загружается в память, но создается только одна текстура, но если вы загружаете много текстур, вы эффективно загружаете много текстур на gpu. – Sneh
И есть ли другой способ упаковать мои текстуры в один файл и загружать только эти текстовые файлы в память, а затем в gpu, которые в настоящее время используются с помощью диспетчера активов? – Dragomirus