在理解tinyxml教程以及如何使用它时遇到困难

Having trouble understanding the tinyxml tutorial and how to use it

本文关键字:何使用 遇到 tinyxml 教程      更新时间:2023-10-16

我已经仔细阅读了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;

提前感谢!

编辑:删除了该编辑,因为该特定问题已经解决。

要做的第一件事是了解更多关于XML和表示/结构化/抽象数据的知识。例如,通常不明智的做法是在房间内对项目"短剑"进行编码。相反,您希望在其他地方提供该项目的定义(或其模板),并且只引用该项目,可能在房间节点内添加一些额外的参数。您可能还想学习使用属性(所有数据都是而不是相同,一些数据应该是属性)。

一旦你摸索过了,真正的TinyXML东西就很容易了。TinyXML是最简单的:

  1. 在一些语义上达成一致。写下它们,记住它们,在创建XML文件时遵循它们
  2. 创建一个TiXmlDocument,给它数据文件的名称
  3. 对文档对象调用LoadFile
  4. 调用FirstChildElement,为您提供根节点(请注意,如果XML中有多个文件室,则需要有一个单独的根节点!)
  5. 用CCD_ 4和CCD_
  6. 现在您必须记住XML文件的结构(或其元素的语义)。TinyXML无法神奇地为您解决这个问题
  7. 使用FirstChildElementNextSiblingElement的方式与房间节点的方式相同,用于"每个房间内的任何东西"(无论您决定是什么),以了解每个房间的外观以及其中的内容你必须知道这些数据意味着什么,TinyXML不可能知道这种事情,它只是为你提供结构化的数据
  8. 解析引用并设置相应的数据结构(例如,当你有类似<door to="guard_room" x="5" y="3" status="locked" />的东西时,创建必要的链接,以便你的游戏做出适当的反应

(别忘了检查错误)

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