所以在我的游戏中我有超过32000张图片(尺寸:32x32)。如何存储这么多图像?还有什么可以更好:将这些图像作为单独的文件或一个大的纹理图集加载?
答案 0 :(得分:3)
通过在GPU中加载纹理来加载游戏中的纹理(图像)。
所以,让我们假设您有3200张图片并单独加载它们意味着GPU上加载了3200个纹理。这很苛刻,会吃掉很多记忆。
现在让我解释一下TextureRegion
TextureRegion
,根据您提供的尺寸从Texture
获取一个区域,这样做的好处是您不必一次又一次地加载纹理并具有更大的优势您是不是必须在GPU上加载每个纹理,因为您可以通过加载一个大纹理并从中提取子区域(TextureRegions)来直接加载它。
现在因为你想使用TextureRegions
,很难知道从Texture Sheet加载它们的每个子图像的尺寸。所以我们要做的是使用TexturePacker(一个应用程序)将Textures打包成更大的纹理,然后创建一个.pack
文件。它会将每个纹理打包成一个图像并创建一个.pack文件。现在,当您加载.pack文件时,它将使用TextureAtlas
类加载
例如,想象一个口袋妖怪包装文件,其中包含所有小宠物。
TextureAtlas pokemonFrontAtlas = new TextureAtlas(Gdx.files.internal("pokemon//pokemon.pack"));
现在您使用Texture Packer打包了3200个文件,并且您希望加载一个图像(Texture
),其文件名为" SomePokemon"。
现在从中获取特定的TextureRegion,你可以
pokemonFrontAtlas.findRegion("SomePokemon")
findRegion(String name)从TextureAtlas
返回textureRegion。
TextureAtlas
类包含AtlasRegion
类的集合,该类扩展了TextureRegion
类。
有关详细信息,请参阅Javadocs TextureAtlas