我已经对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>


房间对象具有以下字段:

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


提前致谢!

编辑:删除了解决特定问题的编辑。

最佳答案

要做的第一件事是了解有关XML以及表示/构造/抽象数据的更多信息。例如,编码例如像您一样在房间内放置“短剑”物品。相反,您可能想在其他地方提供该项目(或其模板)的定义,并且仅对该项目进行引用,并可能在room节点内部添加一些其他参数。您可能还希望学习使用属性(所有数据都不相同,某些数据应该是属性)。

一旦理解了这一点,实际的TinyXML内容就很容易了。 TinyXML大约很简单:


同意一些语义。写下它们,记住它们,并在创建XML文件时遵循它们。
创建一个TiXmlDocument,为其指定数据文件的名称
在文档对象上调用LoadFile
调用FirstChildElement,为您提供根节点(请注意,如果XML中有多个房间,则需要有一个单独的根节点!)
使用FirstChildElementNextSiblingElement遍历筛选器。
现在,您必须记住XML文件的结构(或其元素的语义)。 TinyXML不能为您神奇地解决这一问题。
以与房间节点相同的方式使用FirstChildElementNextSiblingElement来“确定”每个房间(无论您决定的是什么)在每个房间内,以弄清楚每个房间的外观和内部空间。您必须知道该数据的含义,TinyXML无法知道这种事情,它只是为您提供结构化数据。
解析引用并设置相应的数据结构(例如,当您使用<door to="guard_room" x="5" y="3" status="locked" />之类的东西时,请创建必要的链接,以便您的游戏做出适当的反应。


(并且不要忘记检查错误)

TinyXML站点上的教程也非常容易理解(我在2-3年前看过,基本上可以将它们复制粘贴)。如果这些问题确实构成了相当大的问题,那么我将暂时重新考虑编写RPG的想法。我并不是说永远,而是至少要等到您有足够的经验来遵循这些原则时再说。

10-06 00:34