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使用和遍历孩子NextSiblingElement
  6. 现在您必须记住 XML 文件的结构(或其元素的语义)。TinyXML无法神奇地为您解决这个问题
  7. 以与房间节点相同的方式使用FirstChildElementNextSiblingElement用于每个房间的“里面的任何东西”(无论您决定可能是什么)来确定每个房间的外观以及其中的内容。你必须知道这些数据是什么意思,TinyXML 无法知道这种东西,它只是为你提供结构化数据。
  8. 解析引用并设置相应的数据结构(例如,当您有类似<door to="guard_room" x="5" y="3" status="locked" />创建必要链接的内容时,以便您的游戏做出适当的反应。

(不要忘记检查错误)

TinyXML 网站上的教程也很容易理解(上次我看了大约 2-3 年前,你基本上可以复制粘贴它们)。如果这些真的构成了相当大的问题,我会暂时重新考虑编写 RPG 的想法。我不是说永远,但至少在你有足够的经验来遵循这些之前。

于 2012-02-06T11:46:28.383 回答