我有一个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解析变得容易。
答案 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());
这是一个非常痛苦的事情......但我很高兴它现在终于有效了。