导出Libgdx的平铺地图编辑器

时间:2014-07-06 18:43:10

标签: java exception libgdx

我在导出Tiled地图文件时遇到问题。 我创建地图,并建议一个教程,我导出tmx文件并将其导入Eclipse项目资产。 在代码中我这样做了:

tiledMap = new TmxMapLoader().load("map.tmx");
tiledMapRenderer = new OrthogonalTiledMapRenderer(tiledMap);

我的问题是,当我执行它时,我得到了这个:

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: tileset 2/grass-tiles-2-small.png
    at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:140)
    at com.badlogic.gdx.graphics.glutils.FileTextureData.prepare(FileTextureData.java:64)
    at com.badlogic.gdx.graphics.Texture.load(Texture.java:130)
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:121)
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:100)
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:96)
    at com.badlogic.gdx.maps.tiled.TmxMapLoader.load(TmxMapLoader.java:116)
    at com.badlogic.gdx.maps.tiled.TmxMapLoader.load(TmxMapLoader.java:101)
    at com.mygdx.game.MyGdxGame.create(MyGdxGame.java:43)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:136)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: File not found: tileset 2/grass-tiles-2-small.png (Internal)
    at com.badlogic.gdx.files.FileHandle.read(FileHandle.java:136)
    at com.badlogic.gdx.files.FileHandle.readBytes(FileHandle.java:220)
    at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:137)

我该怎样修理它?

3 个答案:

答案 0 :(得分:0)

正如我在libGdx wiki中看到的,有两种方法可以加载tmx文件。确保您的文件在assets文件夹下。您可以在libGdx Wiki how to load tmx files中看到。在here中也有类似的问题。

答案 1 :(得分:0)

Tiled正在.tmx文件中引用其tileset图像源。因此,您使用的tileset grass-tiles-2-small.png嵌入式,也必须加载。幸运的是,这是通过为您解决图像依赖性而自动完成的。

除了map.tmx之外,您还必须确保所有使用过的图像文件都可以通过将它们复制到资源文件夹来访问。它必须如下所示:assets/tileset 2/grass-tiles-2-small.png。这样做之后刷新Eclipse项目,以防它没有注意到。

如果您已经这样做了,问题的另一个来源可能是您的目录名称中的空格。尝试将tileset 2重命名为tileset_2并创建新的.tmx文件。

答案 2 :(得分:0)

它无法加载纹理grass-tiles-2-small.png。我通常会打开TMX/XML文件,并在没有路径的情况下手动将tileheet的文件名设置为文件名。

示例:

<tileset firstgid="1" name="grass" tilewidth="32" tileheight="32">
  <image source="grass-tiles-2-small.png" width="256" height="256"/>
 </tileset>

您应该将纹理放在项目的同一文件夹中,而map.tmx最好位于Android/assets/../..,并使用Gdx.files.internal加载地图。 internal只返回一个常规文件句柄。

tiledMap = new TmxMapLoader().load(Gdx.files.internal("yourmap.tmx"));

TMX只是在相同的文件夹中查找正确的纹理,因为我们没有在tmx / xml中指定路径。

思想: 我真的很讨厌LibGDX默认TmxLoader。它适用于非常简单的事情,但是当精灵重叠时你无法对深度进行排序,因为绘制的唯一方法是一次绘制一个完整的图层。如果您需要在播放器上重叠,则需要能够按照对象的平铺/对象绘制平铺。我为Tiled地图编写了自己的XML解析器,让我感到惊讶的是它有多简单。我有一个非常复杂的地图,它只花了我大约30行代码将所有内容加载到一个数组中,准备在LibGDX内绘制它。