PLIST handling in cocos2d-x
In cocos2d-x, PLIST file can be more easily used than normal XML files as following:
FileUtils* util= FileUtils::getInstance(); std::string path= util->fullPathForFilename("res/test.plist"); ValueMap map= util->getValueMapFromFile(path); for (auto element : map) { std::string key= element.first; Value value= element.second; switch (value.getType()) { case Value::Type::BOOLEAN: CCLOG("%s, %s", key.c_str(), value.asBool()? "true" : "false"); break; case Value::Type::INTEGER: CCLOG("%s, %d", key.c_str(), value.asInt()); break; case Value::Type::FLOAT: CCLOG("%s, %f", key.c_str(), value.asFloat()); break; case Value::Type::DOUBLE: CCLOG("%s, %f", key.c_str(), value.asDouble()); break; case Value::Type::STRING: CCLOG("%s, %s", key.c_str(), value.asString().c_str()); break; default: break; } }
PLIST’s data containers are Array and Dictionary . Array is std::vector<Value> and Dictionary is std::unordered_map<std::string, Value> .
The Value types also includes VECTOR , MAP , and INT_KEY_MAP each of which corresponds to the types of ValueVector , ValueMap , and ValueMapIntKey and they are defined as following:
typedef std::vector<Value> ValueVector; typedef std::unordered_map<std::string, Value> ValueMap; typedef std::unordered_map<int, Value> ValueMapIntKey;
To store data in PLIST:
ValueMap map; for (int i= 0; i < 10; i++) { std::string key= StringUtils::format("key_%d", i); Value val= Value(i); map.insert(std::make_pair(key, val)); } std::string fullpath= util->getWritablePath() + "/test.plist"; FileUtils::getInstance()->writeToFile(map, fullpath);