Cocos2dX弃用了类问题

时间:2015-04-21 14:34:51

标签: c++ cocos2d-x

我正在尝试将我的代码从cocos2d-X版本2.X更新到版本3.X.While更新面临着弃用方法的几个问题。我发现ValueVector是CCArray的替代.Below是我的代码。

             CCArray *array = CCArray::create();

             CCArray *arra1 = CCArray::create();
             std::string winLine4[] = {"a", "b", "c", "d"};
             for (int i = 0; i < 4; i++) {
                  arra1->addObject(CCStringMake(winLine4[i]));
             }
             array->->addObject(arra1);

             CCArray *arra2 = CCArray::create();
             std::string winLine4[] = {"aa", "bb", "cc", "dd"};
             for (int i = 0; i < 4; i++) {
                  arra2->addObject(CCStringMake(winLine4[i]));
             }
             array->->addObject(arra2);

我尝试使用值贴图和值向量,但是发生了很多类型转换问题。请帮助我

1 个答案:

答案 0 :(得分:1)

Value / ValueVector / ValueMap适用于JSON或PLIST数据,因此如果您只使用数字,字符串和其他向量或词典。使用你的例子它是相似的,但你在Value()中包装类型,稍后使用asString(),asInt(),asValueMap()等读取/解析。

ValueVector arr;
ValueVector arr1;
ValueVector arr2;

std::string winLine4[] = {"a", "b", "c", "d"};
for (int i = 0; i < 4; i++) {
    arr1.push_back(Value(winLine4[i]));
}
arr.push_back(Value(arr1));

std::string winLine4[] = {"aa", "bb", "cc", "dd"};
for (int i = 0; i < 4; i++) {
    arr2.push_back(Value(winLine4[i]));
}
arr.push_back(Value(arr2));

稍后访问容器中的值。

Value v = arr.at(3);
string line = v.asString();
// get each Value inside vector
for(auto v : arr) {
   auto line = v.asString();
}

使用valueMap(即:字典)

// create 
ValueMap dict;
dict["an_int"] = Value(3);
dict["a_string"] = Value("test string");
dict["a_float_in_string"] = Value("3.4");

// access 
int v1 = dict["an_int"].asInt();
std::string v2 = dict["a_string"].asString();
int v3 = dict["a_float_in_string"].asInt();
// you may want to check if key exists
Value v4 = dict["not_a_key"];
// v4.isNull() will be true