2016-04-14 2 views
1

私はYAMLを初めてお使いになっていて、サンプルを稼働させようとしています。私はhttp://www.gamedev.net/page/resources/_/technical/apis-and-tools/yaml-basics-and-parsing-with-yaml-cpp-r3508のSprites_list YAMLファイルを持っていますが、ルート/ベースノードは常にNullではありませんが、サイズは常に0です。タイプはScalarで、ノードにアクセスしようとすると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()')例えばスカラーの場合、逆参照することはできません。また、ノードをstdoutにダンプして、読み込んでいるものを正当なものにすることもできます。 –

+0

@Jesse std :: cout << root_node_を実行すると、ファイルパスが出力されます。あたりです。 root_node_.Type()はScalarを示します。ファイルの最初の行は次のとおりです:Sprites_List:[Player、Monster、Gem]それはシーケンスではありませんか? – Grasshopper

+0

あなたがロードしているファイルの正確な内容であなたの質問を編集できますか?上記のコードスニペットを編集して、変数 'file'をどのように初期化するかを示します。 –

答えて

0

YAML::Loadは、ファイルではなくYAML文字列を読み込みます。ファイルをロードするには、YAML::LoadFileを使用する必要があります。

関連する問題