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

来源:互联网 发布:mac电源适配器灯不亮 编辑:程序博客网 时间:2024/06/05 20:11

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();

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





0 0