现在,我有许多XML描述所有游戏对象,并设置了属性。例如:
<gameObject id="commonEnemy">
...
<data>
<life>100</life>
<speed>12</speed>
</data>
<tags>
<tag>KILLABLE</tag>
<tag>COLLIDABLE</tag>
</tags>
...
</gameObject>
所有文件都有不同的“组件”(如上例中的数据和标签)。这些文件有近数千个,占用了大量磁盘空间。但是由于某些游戏对象与其他对象 “共享”某些属性,因此我可以创建一个默认文件并从中继承其他文件,从而仅更改所需的内容。就像是:
<gameObject id="badassEnemy" import="commonEnemy">
...
<data>
<life>200</life> <!-- I'm increasing the life -->
</data>
<tags>
<tag>KILLABLE</tag>
<!-- And is not more collidable. Totally weird XML syntax, but just to make a point -->
remove <tag>COLLIDABLE</tag>
</tags>
...
</gameObject>
但据我所知,XML默认不支持继承,对合并节点也不是很友好。
我需要的是某种格式,它允许我:
- 从一个对象继承
- 添加简单类型和数组类型
- 修改简单类型和数组类型
- 删除简单类型和数组类型
该数组应该通过索引或类似的东西来访问。我查看了diff格式,但我不能使用它,因为如果我更改默认类型,所有的孩子都会被破坏。我知道自定义二进制文件将是节省磁盘空间的方法,但该对象必须可以使用简单的记事本应用程序进行编辑。我还查看了JSON和YAML,它们似乎都没有考虑继承。
是否有一些数据格式可以让我做我想做的事?还是我需要编写自己的数据格式和解析器?