1

现在,我有许多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格式,但我不能使用它,因为如果我更改默认类型,所有的孩子都会被破坏。我知道自定义二进制文件将是节省磁盘空间的方法,但该对象必须可以使用简单的记事本应用程序进行编辑。我还查看了JSONYAML,它们似乎都没有考虑继承。

是否有一些数据格式可以让我做我想做的事?还是我需要编写自己的数据格式和解析器?

4

1 回答 1

0

如果您担心磁盘空间,请考虑将其压缩:) 归档器大大减少了 XML。

很难实现继承,但可能但认为效率不高,这意味着所有这些 XML 共享相同的结构(和标签名称)。

然后你有 XML a 和 XML b 并迭代 b 并将它的孩子添加到 a。如果不添加而无需进一步检查,则必须检查标签是否存在,但如果发现相同,则必须合并它们(迭代)。

您是否绑定到 XML 格式?也许值得检查转换是否适当(转换为您提到的另一种格式,例如 JSON。转换它的构建工具比构建基于 XML 所需的功能要快得多。

此致

于 2012-06-20T13:09:40.070 回答