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 はデフォルトで継承をサポートしておらず、ノードのマージにもあまり適していません。

私が必要としているのは、次のことを可能にするフォーマットです。

  • 1 つのオブジェクトから継承する
  • 単純型と配列型を追加
  • 単純型と配列型を変更する
  • 単純型と配列型を削除する

配列には、インデックスなどでアクセスする必要があります。diff形式を調べましたが、デフォルトの型を変更するとすべての子が壊れてしまうため、それを使用できません。カスタム バイナリファイルがディスク容量を節約する方法であることはわかっていますが、オブジェクトは単純なメモ帳アプリケーションで編集可能でなければなりません。JSONYAMLも調べましたが、どちらも継承を考慮していないようです。

やりたいことを実行できるデータ形式はありますか? または、独自のデータ形式とパーサーを作成する必要がありますか?

4

1 に答える 1

0

ディスク容量が心配な場合は、zip形式で圧縮してください:)アーカイバによってXMLが大幅に削減されます。

継承を実現するのは難しいですが、可能ですが、あまり効率的ではないと思います。つまり、これらのXMLはすべて同じ構造(およびタグ名)を共有します。

次に、XMLaとXMLbがあり、bを反復処理して、その子をaに追加します。さらにチェックせずに追加しない場合はタグが存在するかどうかをチェックする必要がありますが、同じものが見つかった場合はそれらをマージする必要があります(反復)。

XML形式にバインドしていますか?変換が適切かどうかを確認する価値があるかもしれません(前述のJSONなどの別の形式に変換します。変換するツールを構築する方が、XMLに基づいて必要な機能を構築するよりもはるかに高速です。

よろしくお願いします

于 2012-06-20T13:09:40.070 に答える