现在,我有很多 XML 描述所有游戏对象,并设置了其属性。例如:
<gameObject id="commonEnemy">
...
<data>
<life>100</life>
<speed>12</speed>
</data>
<tags>
<tag>KILLABLE</tag>
<tag>COLLIDABLE</tag>
</tags>
...
</gameObject>
所有文件都有不同的“组件”(如上例中的数据和标记)。这些文件中有将近数千个,占用大量磁盘空间。但是由于某些 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 ,它们似乎都没有考虑继承。
是否有一些数据格式可以让我做我想做的事情?或者我需要编写自己的数据格式和解析器?
答案 0 :(得分:0)
如果您担心磁盘空间,请考虑压缩它:存档器会大大减少XML。
很难实现继承,但是可能但不认为非常有效,这意味着所有这些XML共享相同的结构(和标记名称)。
然后你有XML a和XML b并迭代b并将它的子项添加到a。如果没有进一步检查,你必须检查标签是否存在,但如果你找到相同的,你必须合并它们(迭代)。
您是否绑定到XML格式?也许值得检查转换是否适用(对于你提到的另一种格式,如JSON。构建工具来转换它比构建基于XML所需的功能要快得多。
祝你好运