2016-04-14 32 views
1

我是YAML的新手,試圖啓動並運行示例。我有從http://www.gamedev.net/page/resources/_/technical/apis-and-tools/yaml-basics-and-parsing-with-yaml-cpp-r3508 Sprites_list YAML文件和根/基節點始終不是空,但大小始終爲0,類型是標量,並試圖訪問節點拋出YAML :: BadSubscript異常。 Yaml 0.5.3的impl.h中的第118行。爲什麼根節點的大小爲0,爲什麼不訪問節點?YAML根節點!空,但大小爲0

YAML::Node root_node_ = YAML::Load(file); 

if(root_node_.IsNull()) 
    { 
    // Never entered 
    } 

int sz = root_node_.size(); // Always 0 
YAML::Node a_node = root_node_[ "Sprites_List" ]; // Exception 

編輯 - > 全部文件內容(粘貼到一個名爲sprites.yml文件)

Sprites_List: [Player, Monster, Gem] 
Player: 
    SpriteSheet: /Resources/Textures/duotone.png 
    Anim_Names: [run, idle, jump, die] 
    run: 
     Offset: {x: 0, y: 0} 
     Size: {w: 32, h: 32} 
     Frame_Durations: [80, 80, 80, 80, 80, 80] 
    idle: 
     Offset: {x: 0, y: 32} 
     Size: {w: 32, h: 32} 
     Frame_Durations: [80, 120, 80, 30, 30, 130] #Notice the different durations! 
    jump: 
     Offset: {x: 0, y: 64} 
     Size: {w: 32, h: 32} 
     Frame_Durations: [80, 80, 120, 80, 80, 0] #Can I say 0 mean no skipping? 
    die: 
     Offset: {x: 0, y: 192} #192? Yup, it is the last row in that sheet. 
     Size: {w: 32, h: 32} 
     Frame_Durations: [80, 80, 80, 80, 80] #this one has only 5 frames. 
Monster: #lol that lam nam 
    SpriteSheet: /Resources/Textures/duotone.png 
    Anim_Names: [hover, die] 
    hover: 
     Offset: {x: 0, y: 128} 
     Size: {w: 32, h: 32} 
     Frame_Durations: [120, 80, 120, 80] 
    die: 
     Offset: {x: 0, y: 160} 
     Size: {w: 32, h: 32} 
     Frame_Durations: [80, 80, 80, 80, 80] 
Gem: 
    SpriteSheet: /Resources/Textures/duotone.png 
    Anim_Names: [shine] 
    shine: 
     Offset: {x: 0, y: 96} 
     Size: {w: 32, h: 32} 
     Frame_Durations: [80, 80, 80, 80, 80, 80] 

在類的聲明 -

YAML::Node root_node_; 

在類定義 -

CConfigFile(std::string const & file) : 
    root_node_  (YAML::Load(file)) 

文件路徑是完整的絕對路徑,並且\\爲每個\轉義。

+0

節點的類型是什麼? ('root_node_.Type()')如果它是一個標量,例如,您將無法取消引用它。另外,請考慮將節點轉儲到標準輸出,以便您可以明智地檢查您正在加載的內容。 –

+0

@Jesse做std :: cout << root_node_導致文件路徑被打印出來。這是正確的。 root_node_.Type()表示標量。該文件的第一行是這樣的:Sprites_List:[Player,Monster,Gem]它不應該是一個序列嗎? – Grasshopper

+0

你可以用你正在加載的文件的* exact *內容編輯你的問題嗎?還要編輯上面的代碼片段,以顯示如何初始化變量'file'? –

回答

0

YAML::Load加載YAML字符串,而不是文件。要加載文件,您需要使用YAML::LoadFile

相關問題