0

tinyxml(C ++)チュートリアルを徹底的に調べましたが、それでも、私がやろうとしていることに例をどのように適用するかを本当に理解することはできません。要するに、私がやろうとしているのは、xmlを使用してゲーム内の一連の部屋オブジェクトを生成することです。誰かが私に次のxmlとRoomオブジェクトを使った短い例を教えてもらえますか?Xmlは次のとおりです。

<room>
    <name>Prison room</name>
    <connections>
    <connection>Guard room</connection>
    </connections>
  <items>
    <item>
      <name>Short sword</name>
      <attack>2</attack>
       <armor>0</armor>
    </item>
  </items>
  <monsters></monsters>
</room>

Roomオブジェクトには次のフィールドがあります。

std::vector<Item> itemsInRoom;
std::vector<Room> connectingRooms;
std::vector<Monster> monstersInroom;
std::string roomName;

前もって感謝します!

編集:その特定の問題が解決されたため、編集を削除しました。

4

1 に答える 1

1

最初に行うことは、XMLとデータの表現/構造化/抽象化についてさらに学ぶことです。たとえば、通常、部屋の中で「短剣」というアイテムをエンコードするのは賢明ではありません。むしろ、そのアイテム(またはそのテンプレート)の定義を別の場所に提供し、それへの参照のみを持ち、場合によってはルームノード内にいくつかの追加パラメーターを指定する必要があります。おそらく、属性の使用方法も学びたいと思うでしょう(すべてのデータは同じではなく、一部のデータ属性である必要があります)。

それを理解したら、実際のTinyXMLのものは簡単です。TinyXMLは、可能な限り単純です。

  1. いくつかのセマンティクスに同意します。それらを書き留め、覚えて、XMLファイルを作成するときにそれらに従ってください。
  2. を作成しTiXmlDocument、データファイルの名前を付けます
  3. LoadFileドキュメントオブジェクトを呼び出す
  4. を呼び出しFirstChildElementて、ルートノードを指定します(XMLに複数の部屋がある場合は、個別のルートノードが必要であることに注意してください)。
  5. FirstChildElementとを使用して、cildrenを繰り返し処理しNextSiblingElementます。
  6. ここで、XMLファイルの構造(またはその要素のセマンティクス)を覚えておく必要があります。TinyXMLは、魔法のようにそれを理解することはできません
  7. 各部屋の「内部にあるもの」(あなたが決定したものは何でも)の部屋ノードと同じ方法で、各部屋がどのように見え、何が入っているかを把握しますFirstChildElementこのデータの意味を知っておく必要があります。TinyXMLはこの種のことを知ることができず、構造化されたデータを提供するだけです。NextSiblingElement
  8. 参照を解決し、対応するデータ構造を設定します(たとえば<door to="guard_room" x="5" y="3" status="locked" />、ゲームが適切に反応するように必要なリンクを作成するようなものがある場合。

(そしてエラーをチェックすることを忘れないでください)

TinyXMLサイトのチュートリアルも非常に理解しやすいです(最後に2〜3年前に調べたのですが、基本的にはコピーして貼り付けることができます)。これらが本当に大きな問題になるのなら、とりあえずRPGを書くという考えを考え直したいと思います。私は永遠に言っているわけではありませんが、少なくともあなたがこれらに従うのに十分な経験を積むまでは。

于 2012-02-06T11:46:28.383 に答える