寻找具有继承的数据映射格式

时间:2012-06-20 09:12:00

标签: xml actionscript-3 inheritance serialization xml-serialization

现在,我有很多 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 ,它们似乎都没有考虑继承。

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

1 个答案:

答案 0 :(得分:0)

如果您担心磁盘空间,请考虑压缩它:存档器会大大减少XML。

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

然后你有XML a和XML b并迭代b并将它的子项添加到a。如果没有进一步检查,你必须检查标签是否存在,但如果你找到相同的,你必须合并它们(迭代)。

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

祝你好运