在Libgdx中加载瓷砖表

时间:2013-12-24 19:04:47

标签: java graphics libgdx tile

我正在使用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数组必须具有明确指定的所有人都知道的资产。那么,我可以采取其中一种方式,还是我已经做好了?

  1. 通常在我的资产文件夹中加载所有资产,而不知道文件名。我认为这很难,因为我必须有一种方法可以在我加载时轻松映射它们(例如,在地图中)。
  2. 加载大图块表,将其编入索引并将其存储在地图中。与数字1相同的问题。
  3. 以正确的方式做,有人希望现在向我解释。
  4. 奖金布朗尼指出其他改进想法!

1 个答案:

答案 0 :(得分:1)

您可以将AtlasTexturePacker2一起使用。您应该节省使用纹理的数量以进行平铺渲染(最佳选择只是一个大纹理),因为SpriteBatch缓存渲染调用相同的纹理。

将您的瓷砖放入一些forlder(例如tiles/tile-1.pngtiles/tile-2.png),然后通过批处理脚本将它们全部转换为alt:

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")

我希望这会对你有所帮助。