【amazing cocos2d-x 3.0之七】数据结构Vector

1. 简介


值得注意的是,在v3.0 beta版本中加入了数据结构Vector。定义在“COCOS2DX_ROOT/cocos/base”的"CCVector.h"头文件中。

template<class T>class CC_DLL Vector;
cocos2d::Vector<T>是一个封装好的能动态增长顺序访问的容器。在cocos2d-x v3.0 beta之前,使用的是另外一个顺序访问容器cocos2d::CCArray,不过它将被废弃。将采用cocos2d::Vector<T>来替代cocos2d::CCArray,所以在后续的使用中,应该优先考虑使用cocos2d::Vector<T>。


2. 基本使用


(1)创建容器

先创建两个精灵

auto sp1=Sprite::create("CloseNormal.png");
sp1->setPosition(Point(50,50));
this->addChild(sp1);

auto sp2=Sprite::create("CloseSelected.png");
sp2->setPosition(Point(50,100));
this->addChild(sp2);
创建容器

Alpha:
   auto sp_array=Array::create();

beta:
   Vector<Sprite*> sp_vec;


(2)将创建好的精灵添加进容器中

Alpha:
   sp_array->addObject(sp1);
   sp_array->addObject(sp2);

beta:
   sp_vec.pushBack(sp1);
   sp_vec.pushBack(sp2);


(3)获得容器的大小

Alpha:
   int count=sp_array->count();

beta:
   int count=sp_vec.size();


(4)获得容器中的精灵,并让这些元素都做统一的动作

Alpha:
   for(int i=0;i<sp_array->count();i++)
   {
       auto sp=(Sprite*)sp_array->getObjectAtIndex(i);
       sp->runAction(MoveTo::crate(0.2f,Point(200,200)));
    }

beta:
   for( auto& e : sp_vec)
   {
       e->runAction(MoveTo::create(0.2f,Point(200,200)));//这种for写法是C++ 11的新特性
    }

(5)删除容器中的精灵

//如果是要删除容器中最后一个精灵:
Alpha:
   sp_array->removeLastObject();

beta:
   sp_vec.popBack();


//如果是直接删除对象
Alpha:
   sp_array->removeObject(sp1);

beta:
   sp_vec.eraseObject(sp1);


//如果是删除容器中全部的对象
Alpha:
   sp_array->removeAllObject();

beta:
   sp_vec.clear();

(6)其他情况

//a 在容器中的任何一个位置插入对象:
sp_vec.pushBack(sp1);
sp_vec.pushBack(sp2);
//目前得到的情况是,sp1在容器的第一个位置,sp2在容器的第二个位置,这时候我们要将sp3放入第一个位置:
sp_vec.insert(0,sp3);

//b 查找容器中的对象:
//1、假设不知道容器中是否有sp3这个精灵,这时候可以这样:
sp_vec.contains(sp3);//如果有,返回true;如果没有,返回false
//2、已知容器中有sp3这个精灵,想获得它在容器中的位置:
int pos_int=sp_vec.find(sp3);
//上面的方法可以获得sp3的位置,但返回的其实是迭代器的地址,你得到的结果可能是45214等等,如果想获得正常需要的位置,可以这样:
int pos_int=sp_vec.find(sp3)-sp_vec.begin();

此篇文章的素材来自官网和天涯海阁,感谢一下。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值