繁体   English   中英

在Libgdx中加载磁贴

[英]Loading tile sheet in Libgdx

我正在使用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. 通常将所有资产加载到我的资产文件夹中,而不知道文件名。 我认为这很困难,因为我必须有一种在加载时轻松映射它们的方法(例如,在Map中)。
  2. 加载大的瓷砖图纸,将其编入索引并将其存储在地图中。 与数字1相同的问题。
  3. 以正确的方式做,希望有人现在能向我解释。

奖励布朗尼积分可用于其他改进想法!

您可以将AtlasTexturePacker2一起使用。 您应该节省用于贴图渲染的已使用纹理的数量(最好的选择只是一个大纹理),因为SpriteBatch缓存会为相同的纹理渲染调用。

将您的图块放置在某个forlder中(例如tiles/tile-1.pngtiles/tile-2.png 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即可获取图块( TextureRegion而不是Texture ):

skin.getRegion("tile-1")

我希望这可以帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM