我一直在互联网上搜索有关如何将 JSON 与 libgdx 一起使用的信息,特别是加载和保存对象,但我所能找到的只是仅处理 1 个对象的教程。在我的例子中,我将处理许多其他对象中的许多对象。
为了正确看待这个问题,假设我有一个 World
类。
在 World
类中有一个 Level
类列表。
在每个 Level
类中都有一个 Tile
类数组。
在每个 Tile
类中都有一个 TopTile
类和一个 BotTile
类。
BotTile
和 TopTile
类包含整数和字符串等等。
在每个 Level
类中还有 Entity
列表
每个 Entity
都有一个 Inventory
,其中有 Items
如您所见,有很多类,并且在这些类中还有更多的类。我是否必须为每个类都编写一个保存包装器?我知道我可以只保存整个 World
类,据我所知,这只会将所有内容都堆积到一个文件中,但是有很多垃圾不需要保存在所有文件中其他类(class)。我应该如何保存我的 World
类?
澄清一下,当我提到保存包装器时,我指的是对象 X
中的一组方法,它们仅使用必要的参数来保存和加载 X
,从而摆脱所有的垃圾。但是,我有太多可以保存的对象,以至于为每个对象编写包装器似乎很多。
另一件事是,在 Inventory
类包含 Items
的情况下,我只想保存库存的内容,而不是实际的 Item
类,因为每个 Item
都没有改变。虽然保存 Inventory
不会保存它包含的所有项目吗?我觉得这一切有点令人困惑。什么被保存?什么没有被保存?这都是使用我假设的对象的 libGDX JSON 解析器。
如有任何建议,我们将不胜感激。
最佳答案
我在我的 libGDX 游戏中正是这样做的。你这样做:
{
"object_name": "basic_left_gun",
"object_type" : "player_ship_component",
"object_subtype" : "player_ship_left_weapon",
"subtype_properties" :
{
"shot_name" : "basic_shot"
},
"is_animated": false,
"is_dual_state": false,
"is_destructible": true,
"hitpoints": 16,
"second_state_name": "",
}
所以看看“subtype_properties”字段。它内部还有另一个 JSON 对象。因此,当我在 java 中序列化和查询 JSON 对象时,当我执行 json.get("subtype_properties") 时,我实际上只是得到了另一个 JSON 对象。从那里我可以查询并获取属性。
理论上,您可以永远这样做。虽然我的方法是将每个对象的基本定义存储在 JSON 中,然后使用上面的嵌套 JSON 对象将它们的属性链接在一起,或者使用相同的方法定义唯一的属性。
关于java - LibGDX JSON 对象保存/序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23587331/