cocos2d::vector如何实现二维数组?
以前版本使用CCArray可以实现二维数组的功能(CCArray保存若干另外的CCArray),但是3.x不建议使用Array了,替代方案是cocos2d::vector。
但是问题来了,vector里面不能保存vector,也就不能实现多维数组的功能了,请问,我怎么才能用vector实现二维数组(多维数组)的功能呢?
我想到的是用标准库实现:std::vector<std::vector<Ref*>>,但是,还是有问题:我在init方法里保存的数据,在其他方法里不能调用!以前用CCArray的
时候,解决方法是retain一下,但是vector不能retain,怎么办?愁人!俺读的书少(C++刚学),大拿们不要骗我!
vector里面不能保存vector====》可有根据呀?
cocos2d::vector只能保存Ref*的对象,网上有说,我自己也试了,真的不行!
你这话不假,确实是事实。因为它定义成那样了!原始的vector是可以包含vector的。
嗯,我就是想用cocos2d::Vector实现一个二维数组,怎么破?
Vector ] :865: 试试呗万一能用呢
int a = 10;
std::string b = “star is so cool”;
ValueVector star_val;
//放入ValueVector前都要先将类型转成Value类型
star_val.push_back( Value(a) );
star_val.push_back( Value(b) );
ValueVector star_val2;
star_val2.push_back( Value(star_val) );
Value貌似不能存Ref*类型的吧?我想保存的是Sprite,怎么办?
我还是回去用__Array吧!那个挺好用,不知道为什么被抛弃(抛弃一个功能,也不给一个完善的替代方案!),
大拿们的心思,搞不懂!
Vector可以保存Ref*类型呀,而Sprite的祖先类就是Ref
标准库实现
那个是专门用来存放数据类型的。
要是存放Ref*的话只能借助std::vector了,也挺简单。
__Array迟早要被抛弃的,还是早点习惯Vector吧。
std::vector< Vector<Sprite*> > vec; // 二维Sprite数组
Vector<Sprite*> temp1; // 一维Sprite数组
Vector<Sprite*> temp2;
auto sp1 = Sprite::create("CloseNormal.png");
sp1->setPosition(Vec2(200, 200));
temp1.pushBack(sp1); // 将精灵放入一维数组中
auto sp2 = Sprite::create("CloseSelected.png");
sp2->setPosition(Vec2(400, 400));
temp2.pushBack(sp2);
vec.push_back(temp1); // 将一维数组放入二维数组中
vec.push_back(temp2);
this->addChild(vec.at(0).at(0)); // sp1
this->addChild(vec.at(1).at(0)); // sp2
至于楼主的 “在init方法里保存的数据,在其他方法里不能调用” 这个问题我倒是没出现,就是在其他类里调用也没问题。
不好猜测楼主是什么原因造成的。