Я пытаюсь загрузить простую карту, созданную Tiled, в свой проект студии Android. Я использую libGDX для создания простой платформенной игры. В Tiled я только что импортировал набор тайлов, создал платформу и все остальное.
Теперь я хотел бы понять в части ведьм, что у меня не получается загрузить, потому что я не могу понять, почему у меня эта ошибка:
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.SerializationException: Error parsing file: mapassets.json
at com.badlogic.gdx.utils.XmlReader.parse(XmlReader.java:83)
at com.badlogic.gdx.maps.tiled.TmxMapLoader.getDependencyFileHandles(TmxMapLoader.java:116)
at com.badlogic.gdx.maps.tiled.TmxMapLoader.load(TmxMapLoader.java:74)
at com.badlogic.gdx.maps.tiled.TmxMapLoader.load(TmxMapLoader.java:59)
at com.arcadan.push_the_player.TiledTest.create(TiledTest.java:28)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:150)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:127)
Caused by: com.badlogic.gdx.utils.SerializationException: Error parsing XML on line 1 near:
{ "columns":10,
"image":"../..
at com.badlogic.gdx.utils.XmlReader.parse(XmlReader.java:330)
at com.badlogic.gdx.utils.XmlReader.parse(XmlReader.java:61)
at com.badlogic.gdx.utils.XmlReader.parse(XmlReader.java:81)
... 6 more
Вот карта .tmx:
<?xml version = "1.0" encoding = "UTF-8"?>
<map version = "1.4" tiledversion = "1.4.3" orientation = "orthogonal" renderorder = "right-down" width = "20" height = "20" tilewidth = "12" tileheight = "12" infinite = "0" nextlayerid = "2" nextobjectid = "1">
<editorsettings>
<export target = "../../android/assets/MyMap.tmx" format = "tmx"/>
</editorsettings>
<tileset firstgid = "1" source = "../mapassets.json"/>
<layer id = "1" name = "Tile Layer 1" width = "20" height = "20">
<data encoding = "csv">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,2,3,4,5,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,21,22,23,24,25,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,31,32,33,34,35,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,41,42,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</data>
</layer>
</map>
Вот мой разочаровывающий mapassets.json (этот файл находится внутри папки assets/mapAssets в моем проекте):
{ "columns":10,
"image":"../../assets/mapAssets/mapassets.png",
"imageheight":128,
"imagewidth":128,
"margin":0,
"name":"mapassets",
"spacing":0,
"tilecount":100,
"tiledversion":"1.4.3",
"tileheight":12,
"tilewidth":12,
"type":"tileset",
"version":1.4
}
и вот как я загружаю файл .tmx:
@Override
public void create () {
float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
camera = new OrthographicCamera();
camera.setToOrtho(false,w,h);
camera.update();
tiledMap = new TmxMapLoader().load("MyMap.tmx");
tiledMapRenderer = new OrthogonalTiledMapRenderer(tiledMap);
Gdx.input.setInputProcessor(this);
}
Вы получаете сообщение об ошибке, потому что вы сохранили свой набор тайлов в виде файла .json
, но реализация libGDX в TmxMapLoader
предполагает, что он в формате XML.
Вы можете увидеть это в исходном коде TmxMapLoader.
Вместо этого сохраните свой набор плиток как файл .tsx
и укажите его в своем файле .tmx
, и он должен работать.