Невозможно разобрать plist в Cocos2dx 3.0

введите описание изображения здесь

Я хочу разобрать эту структуру plist... Пожалуйста, помогите

То, что я использую сейчас

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

Но есть ключи, пропускающие диктовку выхода...

3 ответа

Решение

В версии 3.0+ структура данных, такая как CCDictionary CCArray, устарела. Вы должны использовать ValueMap или ValueVector и т. Д. Вы можете найти структуру данных в папке ValueVector> CCValue.h

Вот код для чтения этого списка:

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 (или, другими словами, словарь или карта или HashMap)

Редактировать:

Ответ "Wez Sie Tato" является правильным, но в вашем случае вы должны прочитать plist в ValueMap вместо ValueVector, потому что ваш plist на самом деле представляет собой словарь (ValueMap), а не массив (ValueVector).

Попробуйте использовать ValueMap и FileUtils для загрузки файла PList. Вы пытаетесь загрузить словарь из cocos2d-x v2.x. В cocos2d-x вы должны сделать что-то вроде этого:

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

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

Просто нет ключа с именем "ExitButton" в корне списка (и, следовательно, в mainDictionary).

mainDictionary ключами будут "background", "otherButton" и "Buttons", каждый из которых возвращает другой экземпляр Dictionary или Array.

Если ключ "ExitButton" находится где-то в массиве "Кнопки", необходимо перечислить массив "Кнопки" и найти ключ "ExitButton" в одном из элементов массива.

Другие вопросы по тегам