我正在尝试将我的代码从 cocos2d-X 版本 2.X 更新到版本 3.X。虽然更新时面临一些不推荐使用的方法的问题。我发现 ValueVector 是 CCArray 的替代品。下面是我的代码。
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);
我尝试使用值映射和值 vector ,但出现了很多类型转换问题。请帮助我
最佳答案
Value/ValueVector/ValueMap 适用于 JSON 或 PLIST 数据,因此如果您仅使用数字、字符串和其他 vector 或字典。使用您的示例是相似的,但是您将类型包装在 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
关于c++ - Cocos2dX deprecated classes 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29775288/