解说cocos2dx 2.0系列 到 3.0系列的一些转换
从plist读取配置
2.0做法
在Cocos2d-x 2.0系列中,若要从plist文件读取配置,可按以下步骤操作:
// 创建一个CCArray对象,并从指定的levelFile文件中读取内容
CCArray* pKeyArray = CCArray::createWithContentsOfFile(levelFile);
// 对pKeyArray进行引用计数加1操作,防止其被意外释放
pKeyArray->retain();
// 定义一个CCObject指针,用于遍历CCArray
CCObject* pObj = NULL;
// 使用CCARRAY_FOREACH宏遍历pKeyArray
CCARRAY_FOREACH(pKeyArray, pObj)
{
// 将当前遍历到的对象转换为CCDictionary指针
CCDictionary *waveItem = (CCDictionary*)pObj;
// 这里可以添加对waveItem的具体处理逻辑
...
}
在上述代码中,首先使用CCArray::createWithContentsOfFile函数从plist文件中读取内容并存储在CCArray对象中。为了避免该对象在后续操作中被意外释放,调用了retain方法增加其引用计数。然后使用CCARRAY_FOREACH宏遍历CCArray,将每个元素转换为CCDictionary类型,后续可对其进行具体的处理。
3.0做法
在Cocos2d-x 3.0系列中,从plist文件读取配置的方式有了较大变化:
// 使用FileUtils单例对象从指定的levelFile文件中读取内容并存储为ValueVector
ValueVector arr = FileUtils::getInstance()->getValueVectorFromFile(levelFile);
// 使用C++11的范围for循环遍历ValueVector
for(auto obj : arr)
{
// 将当前遍历到的对象转换为ValueMap
ValueMap map = obj.asValueMap();
// 输出map中键为"showTime"的值,以整数形式打印
CCLOG("obj.getType():%d ",map["showTime"].asInt());
}
在Cocos2d-x 3.0中,引入了ValueVector和ValueMap等新的数据类型,替代了旧版本中的CCArray和CCDictionary。使用FileUtils::getInstance()->getValueVectorFromFile函数从plist文件中读取内容并存储为ValueVector。然后使用C++11的范围for循环遍历ValueVector,将每个元素转换为ValueMap类型,并可以通过键来访问其中的值。这里以输出"showTime"键对应的值为例展示了具体的使用方法。