Cocos2dx3.0提高篇(八)浅谈Vector的使用

来源:互联网 发布:淘宝认证复核失败2017 编辑:程序博客网 时间:2024/06/03 18:56
  • 前两天有人问我说在3.0 beta2版本里,使用array 后编译出错,其实是因为自beta版本开始,已没有Array 和 Dictionary,取而代之的是容器:Vector 和 Map


    先说Vector吧。
    如果说C++的vector容器怎么用,如果我说太多肯定一下子就暴露了我菜鸟的身份。所以呢,在这里不过多阐述,也请大神绕路。
    所以,还是回到Vector的使用问题上吧。该怎么用?既然Vector是替代了Array,那就拿Array 和Vector进行对比吧。


    下面我就以创建 Sprite 精灵对象的容器为例介绍吧
    1、创建

    先创建两个精灵:

     

    view sourceprint?
    1.auto sp1 = Sprite::create("CloseNormal.png");
    2.sp1->setPosition(Point(100,100));
    3.this->addChild(sp1,1);
    4. 
    5.auto sp2 = Sprite::create("CloseSelected.png");
    6.sp2->setPosition(Point(100,200));
    7.this->addChild(sp2,1);

    创建容器

     

     

    view sourceprint?
    1.Alpha:
    2.auto sp_array = Array::create();
    3.beta:
    4.Vector<Sprite*> sp_vec;

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

     

     

    view sourceprint?
    1.Alpha:
    2.sp_array->addObject(sp1);
    3.sp_array->addObject(sp2);
    4. 
    5. 
    6.beta:
    7.sp_vec.pushBack(sp1);//和 堆栈 一样一样的
    8.sp_vec.pushBack(sp2);

    3、获得容器中的大小

     

     

    view sourceprint?
    1.Alpha:
    2.int count = sp_array->count();
    3.beta:
    4.int count = sp_vec.size();

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

     

     

    view sourceprint?
    01.Alpha:
    02.for(int i=0;i<sp_array->count();i++)
    03.{
    04.auto sp = (Sprite*)sp_array->getObjectAtIndex(i);
    05.sp->runAction(MoveTo::create(0.2f,Point(100,100)));
    06.}
    07.beta:
    08.for(int i=0;i<sp_vec.size();i++)
    09.{
    10.auto sp = sp_vec.at(i);
    11.sp->runAction(MoveTo::create(0.2f,Point(100,100)));
    12.}

    5、删除容器中的精灵

     

     

    view sourceprint?
    01.//如果是要删除容器中最后一个精灵的话:
    02.Alpha:
    03.sp_array->removeLastObject();
    04.beta:
    05.sp_vec.popBack();
    06. 
    07.//如果是直接删除对象:
    08.Alpha:
    09.sp_array->removeObject(sp1);
    10.beta:
    11.sp_vec.eraseObject(sp1);
    12.//如果是要删除容器中全部的对象:
    13.Alpha:
    14.sp_array->removeAllObject();
    15.beta:
    16.sp_vec.clear();

    6、其他
    ”说破不值钱“,其实Vector也就那样啦,恩,那样...最后补充一些其他的用法:

     

     

    view sourceprint?
    01.//a 在容器中的任何一个位置插入对象:
    02.sp_vec.pushBack(sp1);
    03.sp_vec.pushBack(sp2);
    04.//目前的情况是,sp1在容器的第一个位置,sp2在容器的第二个位置,这时候我们要将sp3放入第一个位置:
    05.sp_vec.insert(0,sp3);//ok
    06. 
    07.//b 查找容器中的对象:
    08.//1、假设不知道容器中是否有sp3这个精灵,这时候可以这样:
    09.sp_vec.contains(sp3);//如果有,返回true,无返回false;
    10.//2、已知容器中有sp3这个精灵,想获得它在容器中的位置:
    11.int pos_int = sp_vec.find(sp3);
    12.//上面的方法可以获得sp3的位置,但返回的其实是迭代器的地址,你得到的结果可能是45214等等,如果想获得正常需要的位置,可以这样:
    13.int pos_int = sp_vec.find(sp3) - sp_vec.begin();//ok

    恩,时间不多,先写到这吧。昨晚才去了解beta里的Vector,如果有什么写错的地方或者用的不恰当的地方,敬请告知...

     

    原创地址:http://blog.csdn.net/start530?viewmode=contents

0 0
原创粉丝点击