我正在使用 cocos2d-x 和 C++ 开发游戏,我需要为此应用程序加载一堆 YAML 文件。我尝试使用yaml-cpp库,结果非常好。
问题是这个库似乎非常不稳定(至少在 iOS 上的 cocos2d-x 下),因为几乎 20% 的时间它无法加载相同的 YAML 文件并抛出“未找到地图结尾”、“无效地图元素” ,或类似的错误。
我遵循了HowToParseADocument指南,所以我认为我做对了。但是,由于它不是 100% 可靠的,我正在寻找更稳定的东西。例如:
long size = 0;
unsigned char *yaml = FileUtils::getInstance()->getFileData("file.yml", "r", &size);
std::stringstream is;
is << yaml;
YAML::Parser parser(is);
YAML::Node doc;
while(parser.GetNextDocument(doc)) {
instance->settings = doc.Clone();
}
解析器通常会在parser.GetNextDocument(doc)
调用时中断。我要阅读的文档是简单的 YAML,其中包含key: value
以下简单形式的列表:
# Comment
section1:
param1: value1
param2: value2
# Comment
section2:
param1: value1
param2: value2
编辑
我不允许透露原始 YAML 文件的内容,但我可以给你一些信息:
- 它仅包含映射,而不包含数组、别名或其他特定结构
- 那些
value
s 是整数、浮点数或字符串 - 它已经用这个免费的工具进行了检查,并取得了成功。
我曾经阅读过的代码,贴在那里,它总是以那种形式出现,我不会修改它以使应用程序正确运行。只是应用程序启动并工作或启动但不工作。由于我中间什么都没改变,我真的不明白发生了什么。