LibGDX:无法从assets文件夹加载json文件

时间:2016-02-17 15:41:38

标签: java json gwt libgdx filehandle

我有一个json文件,其中包含我存储在assets文件夹中的游戏中所有图块的数据。我尝试使用TileList dataList = json.fromJson(TileList.class, Gdx.file.internal("map-elements/tiles/tiles.json"))访问和解析它。这适用于桌面版本,但在html版本上,在使用gwt转换后,我收到了以下错误:

GwtApplication: exception: Error reading file: map-elements/tiles/tiles.json
Error reading file: map-elements/tiles/tiles.json
Couldn't find Type for class 'net.vediogames.archipelo.world.tiles.TileList'

TileList是一个简单的对象,它包含一个TileData数组,然后可以将其转换为Tile对象。我这样做是为了让json解析变得容易。

2 个答案:

答案 0 :(得分:0)

json错误的解决方案很简单。而不是将FileHandle传递给json解析器,而是从文件中传递字符串,如下所示:

TileList dataList = json.fromJson(TileList.class, Gdx.file.internal("map-elements/tiles/tiles.json").readString());

最后,解决该问题我需要做的就是添加.readString()。至于Couldn't find Type for class 'net.vediogames.archipelo.world.tiles.TileList'错误,我也找到了解决方案,但它更复杂。

JavaScript处理类引用的方式与Java不同。因此,如果没有首先注册它,我就无法使用TileList.class,因此LibGDX可以生成反射。我需要做的是将这一行添加到我的* .gwt.xml文件中:

<extend-configuration-property name="gdx.reflect.include" value="net.vediogames.archipelo.world.tiles.TileList" />

如果您需要有关反射如何工作以及如何包含或排除的完整教程,请查看官方LibGDX教程here

答案 1 :(得分:0)

您的解决方案对我不起作用,我仍然遇到同样的错误。经过几个小时的测试后,我得到了它的工作,使用你的建议和使用ClassReflection而不是引用类本身。 你的例子:

TileList dataList = json.fromJson(TileList.class, Gdx.file.internal("map-elements/tiles/tiles.json").readString());

在我的工作代码中查找:

TileList dataList = (TileList) json.fromJson(ClassReflection.forName(TileList.class.getName()), Gdx.file.internal("map-elements/tiles/tiles.json").readString());

这是一个非常痛苦的事情......但我很高兴它现在终于有效了。