Libgdx 纹理图集与文件

Libgdx texture atlas vs files

所以在我的游戏中我有超过 32000 张图像(大小:32x32)。如何存储这么多图像?有什么更好的办法:将这些图像作为单独的文件或作为一个大的纹理图集加载?

当您在游戏中加载纹理(图像)时,您会在 GPU 中加载纹理。

假设您有 3200 张图像并且分别加载它们,这意味着在 GPU 上加载了 3200 个纹理。这很苛刻,会占用大量内存。

现在让我解释一下什么是TextureRegion

TextureRegion,根据你提供的维度从Texture中取一块区域,有它的好处是你不用一次又一次地加载纹理,更大的好处您是否不必在 GPU 上加载每个纹理,因为您可以通过加载一个大纹理并从中提取子区域 (TextureRegions) 来直接加载它。

现在因为要使用 TextureRegions,所以很难知道每个子图像的尺寸以从纹理 Sheet 加载它们。所以我们要做的是使用 TexturePacker(一个应用程序)将纹理打包成一个更大的纹理,然后创建一个 .pack 文件。它会将每个纹理打包到一个图像中并创建一个 .pack 文件。现在,当您加载 .pack 文件时,它是使用 TextureAtlas class 加载的 例如,想象一个包含所有口袋妖怪的口袋妖怪包文件。

 TextureAtlas  pokemonFrontAtlas = new TextureAtlas(Gdx.files.internal("pokemon//pokemon.pack"));

现在您使用 Texture Packer 打包了 3200 个文件,并且您想要加载文件名为 "SomePokemon".

的图像 (Texture)

现在要从中获取特定的 TextureRegion,您可以

pokemonFrontAtlas.findRegion("SomePokemon")

findRegion(String name) returns 你从 TextureAtlas.

中获取 textureRegion

A TextureAtlas class 包含 AtlasRegion class 的集合,它扩展了 TextureRegion class.

有关详细信息,请参阅 Javadocs TextureAtlas