2012-02-06 51 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