我正在使用Libgdx,我仍然是一个菜鸟(不是编程,只是Libgdx)。我有一张大型 png 瓷砖板,我也有单独的瓷砖。我想做的是让我自己轻松加载这些东西。现在,我通过传递这样的文件名来单独加载它们:
final String[] fileNames =
{ "data/brick_dark1.png", "data/dngn_open_door.png",
"data/cobble_blood1.png", "data/misc_box.png", "data/brick_dark6.png",
"data/stone_stairs_down.png", "data/stone_stairs_up.png",
"data/dngn_unseen.png", "data/dirt1.png", "data/dragon1.png", };
for (String s : fileNames)
{
texture = new Texture(Gdx.files.internal(s));
texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
// TextureRegion region =
// new TextureRegion(texture, 0, 0, spriteWidth, spriteHeight);
sprite = new Sprite(texture);
thingRepo.add(sprite);
}
这工作得很好,但这也意味着我的 fileNames 数组必须明确指定人类已知的每个资产。那么,我可以用这些方式之一来做,还是我已经做对了?
- 通常加载我的资产文件夹中的所有资产,而无需知道文件名。我想这很难,因为我必须有一种在加载时轻松映射它们的方法(例如,在 Map 中)。
- 加载大型切片表,为其编制索引并将其存储在地图中。与数字 1 相同的问题。
- 以正确的方式做,希望现在有人会向我解释。
其他改进想法的奖励布朗尼积分!
您可以将Atlas
与TexturePacker2
一起使用。您应该节省用于磁贴渲染的纹理数量(最好只选择一个大纹理),因为SpriteBatch
缓存渲染调用相同的纹理。
将瓷砖放在一些障碍物中(例如 tiles/tile-1.png
, tiles/tile-2.png
),并通过批处理脚本将它们全部转换为 altas:
java -cp /path-to-the/gdx.jar;/path-to-the/gdx-tools.jar com.badlogic.gdx.tools.imagepacker.TexturePacker2 %source_folder%/tiles %destination_folder%/tiles
TexturePacker2
将所有纹理打包到Atlas
.现在你可以加载它:
TextureAtlas atlas = new TextureAtlas(Gdx.files.internal("tiles/yourAtlas.atlas"), false);
现在,您可以通过调用 atlas.getRegions()
来获取加载的磁贴,或者使用Skin
来保存它们:
skin.addRegions(atlas);
现在你可以简单地通过调用来获取磁贴(TextureRegion
,而不是Texture
):
skin.getRegion("tile-1")
我希望这对你有所帮助。