我已经对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中有多个房间,则需要有一个单独的根节点!)
使用FirstChildElement
和NextSiblingElement
遍历筛选器。
现在,您必须记住XML文件的结构(或其元素的语义)。 TinyXML不能为您神奇地解决这一问题。
以与房间节点相同的方式使用FirstChildElement
和NextSiblingElement
来“确定”每个房间(无论您决定的是什么)在每个房间内,以弄清楚每个房间的外观和内部空间。您必须知道该数据的含义,TinyXML无法知道这种事情,它只是为您提供结构化数据。
解析引用并设置相应的数据结构(例如,当您使用<door to="guard_room" x="5" y="3" status="locked" />
之类的东西时,请创建必要的链接,以便您的游戏做出适当的反应。
(并且不要忘记检查错误)
TinyXML站点上的教程也非常容易理解(我在2-3年前看过,基本上可以将它们复制粘贴)。如果这些问题确实构成了相当大的问题,那么我将暂时重新考虑编写RPG的想法。我并不是说永远,而是至少要等到您有足够的经验来遵循这些原则时再说。