2012-02-06 60 views
0

我已经详细了解了tinyxml(C++)教程,但仍然无法真正理解如何将示例应用于我正在尝试执行的操作。我想要做的就是使用xml在游戏中生成一系列房间对象。有人能够给我一个简短的例子,请使用下面的xml和Room对象吗? XML是:无法理解tinyxml教程及其使用方法

<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; 

谢谢!

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

+3

你有什么尝试过?你卡在哪里?你得到的结果是什么,而不是你期待的结果?首先,尝试自己做一些事情,然后当你遇到问题时,我们可以提供帮助。只是根据你的用例要求一个例子并不是真正的这个网站的工作原理。 – Jasper 2012-02-06 11:05:41

+0

我不能开始,因为我不明白如何开始或做什么,这就是问题所在=/ – Jarob22 2012-02-06 11:08:03

+0

然后恐怕我们无法帮助你,因为你无法开始。目前我无法加载TinyXML页面,但是从教程中复制并开始将其修改为您的用例开始的好方法。 – Jasper 2012-02-06 11:15:40

回答

1

要做的第一件事是了解更多关于XML和关于表示/结构化/抽象数据。例如,编码例如通常是不明智的在房间里的项目“短剑”,就像你一样。相反,您会希望在其他地方提供该项目的定义(或其模板),并仅对该项目提供参考,可能在房间节点内部有一些额外的参数。您可能还希望学习使用属性(所有数据是不是相同,某些数据应该是是属性)。

一旦你掌握了这一点,实际的TinyXML的东西很容易。 TinyXML大概就像它可以得到的一样简单:

  1. 同意一些语义。把它们写下来,记住它们,当你创建XML文件时跟着它们。
  2. 创建一个TiXmlDocument,给它命名为您的数据文件的
  3. 呼叫LoadFile您的文档对象
  4. 呼叫FirstChildElement上,让您的根节点(注意,如果你在你需要的XML多个房间有一个单独的根节点!)
  5. 使用FirstChildElementNextSiblingElement迭代孩子们。
  6. 现在您必须记住您的XML文件的结构(或其元素的语义)。 TinyXML 不能神奇地为你解决这个问题
  7. 使用FirstChildElementNextSiblingElement的方式与每个房间“任何内部任何东西”的房间节点(无论您是否决定这个房间节点)的相同方式来确定每个房间的外观和内容。 你必须知道这个数据的含义,TinyXML无法知道这种事情,它只是为你提供结构化数据。
  8. 解析引用,并设置了相应的数据结构(例如,当你有像<door to="guard_room" x="5" y="3" status="locked" />创造必要的联系,使你的游戏作出适当的反应。

(不要忘记检查错误)

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

+0

你能否解释为什么你说在房间内编码短剑项目是不明智的? – Jarob22 2012-02-06 11:53:11

+0

一款游戏有很多剑。可能有大剑和小剑,锋利而尖锐,但每把剑都差不多。它有一个手柄和一个刀片,你可以把它摆动到某个人身上以切断它。这个“公共逻辑”最好在某处进行编码,并根据需要用参数进行修改,而不是一再重复冗余信息。它更简单,它使用更少的内存,更少的计算能力,最重要的是,制作愚蠢错误的空间更小。 – Damon 2012-02-06 12:22:14

+0

好吧,那么我会使用一个单独的XML文件呢?另外,你可以看看我的编辑? :)我给你的建议去.. – Jarob22 2012-02-06 12:24:23