无法在Cocos2dx 3.0中解析plist

时间:2014-08-22 09:15:43

标签: cocos2d-x cocos2d-x-3.0

enter image description here

我想解析这个plist结构......请帮忙

我现在使用的是

mainDictionary = __Dictionary::createWithContentsOfFile(plistPath.c_str());
__Dictionary *exit = (__Dictionary*)__Dictionary::createWithDictionary(
            (__Dictionary*)mainDictionary->objectForKey(std::string("otherButton")));

但是有些钥匙缺少退出的决定......

3 个答案:

答案 0 :(得分:6)

在3.0+版本中,不推荐使用像CCDictionary CCArray这样的数据结构。您必须使用 ValueMap ValueVector 等 您可以在ValueVector>文件夹下找到数据结构。的 CCValue.h

以下是阅读此plist的代码:

cocos2d::ValueMap gameData;
gameData = FileUtils::getInstance()->getValueMapFromFile("data.plist");

如果您想阅读值:

//1
std::string backgroundValue = gameData.at("background");

//2
ValueMap otherButtonsMap = gameData.at("otherButton").asValueMap();
std::string tagValue = otherButtonsMap.at("Tag");

//3
ValueVector buttonsVector = gameData.at("Buttons").asValueVector();
ValueMap item0 = buttonsVector.at(0).asValueMap();

其中gameData是ValueMap(或者换句话说是Dictionary或Map或HashMap)

修改

" Wez Sie Tato"是正确的但在你的情况下你应该读取ValueMap中的plist而不是ValueVector,因为你的plist实际上是Dictionary(ValueMap)而不是Array(ValueVector)。

答案 1 :(得分:1)

尝试使用ValueMap和FileUtils加载PList文件。您尝试加载字典的方式来自cocos2d-x v2.x.在cocos2d-x中你应该做这样的事情:

ValueMap mainDictionary = FileUtils::getInstance()->getValueMapFromFile(plistPath.c_str());

ValueMap exit = mainDictionary["otherButton"].asValueMap();

答案 2 :(得分:0)

根本没有名为" ExitButton"在plist的根中(因此在mainDictionary)。

mainDictionary键将是" background"," otherButton"和"按钮",每个都返回另一个Dictionary或Array实例。

如果" ExitButton" key在Buttons数组中的某个位置,你必须枚举Buttons数组并找到" ExitButton"键入其中一个数组项。