Cocos2dx 3.0 过渡篇(八)浅谈容器Vector

尊重原创,转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/19170853

前两天有人问我说在3.0 beta2版本里,使用array 后编译出错,其实是因为自beta版本开始,已没有Array,取而代之的是容器:Vector 和 Map

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

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

先创建两个精灵:

[cpp] view
plain
copy

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

   创建容器

[html] view
plain
copy

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

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

[cpp] view
plain
copy

  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、获得容器中的大小

[cpp] view
plain
copy

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

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

[cpp] view
plain
copy

  1. Alpha:  
  2.     for(int i=0;i<sp_array->count();i++)  
  3.     {  
  4.         auto sp = (Sprite*)sp_array->getObjectAtIndex(i);  
  5.         sp->runAction(MoveTo::create(0.2f,Point(100,100)));  
  6.     }  
  7. beta:  
  8.     for( auto& e : sp_vec)
  9.     {
  10.         e->runAction(MoveTo::create(0.2f,Point(100,100)));//这种for写法是C++
    11的新特性
  11.     }

5、删除容器中的精灵

[cpp] view
plain
copy

  1. //如果是要删除容器中最后一个精灵的话:  
  2. Alpha:  
  3.     sp_array->removeLastObject();  
  4. beta:  
  5.     sp_vec.popBack();  
  6.       
  7. //如果是直接删除对象:  
  8. Alpha:  
  9.     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也就那样啦,恩,那样...最后补充一些其他的用法:

[cpp] view
plain
copy

  1. //a 在容器中的任何一个位置插入对象:  
  2. sp_vec.pushBack(sp1);  
  3. sp_vec.pushBack(sp2);  
  4. //目前的情况是,sp1在容器的第一个位置,sp2在容器的第二个位置,这时候我们要将sp3放入第一个位置:  
  5. sp_vec.insert(0,sp3);//ok  
  6.   
  7. //b 查找容器中的对象:  
  8. //1、假设不知道容器中是否有sp3这个精灵,这时候可以这样:  
  9. 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

时间: 2024-09-11 17:04:13

Cocos2dx 3.0 过渡篇(八)浅谈容器Vector的相关文章

Cocos2dx 3.0 过渡篇(四) 创建项目

尊重原创,转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/18620001 前天参加同学的婚礼,喝酒喝得差点没把胃都给吐出来.昨天一天 请假在家里休养.今早原地满血复活,觉得有必要再写篇博客,告诉大家,我又回来啦. 话说应该写点什么内容呢?干脆写个在3.0Alpha1版本上创建项目的流程吧,就当做笔记. 在Cocos2dx 3.0 Beta版本创建项目的方式已经更改,由于我近阶段都是用Alpha1版本开发

Cocos2dx 3.0 过渡篇(十二) lambda表达式的使用

本篇博客来自star特530,转载请注明出处.http://blog.csdn.net/start530/article/details/19913611 Cocos2dx 3.0 版本后加入了lambda表达式,或者说C++ 11终于引入了lambda表达式,那么,什么是lambda表达式呢? 例如调用<algorithm>中的std::sort,ISO C++ 98 的写法是要先写一个compare函数: [cpp] view plaincopy bool compare(int &

Cocos2dx 3.0 过渡篇(九)浅谈容器Map

尊重原创,转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/19284301 本篇接着上一篇的容器继续唠叨,了解上一篇:http://blog.csdn.net/start530/article/details/19170853 既然Vector是对比Array,那么Map就对比Dictionary吧.1.创建 [cpp] view plaincopy auto sp1 = Sprite::create("

Cocos2dx 3.0 过渡篇(五) 随机数的获取

本来上午是要转载一篇看起来还不错的博客,被cocos2dx官方微博推荐过.谁知道早上打开链接时那篇博客已经转为私密了.早知道昨晚就应该复制一下内容,今天厚脸皮的来篇原创岂不妙哉.哈哈. 1.简单的随机数用法:CCRANDOM_0_1 示例如下: [cpp] view plaincopy int HelloWorld::getRand(int start,int end)   {    float i = CCRANDOM_0_1()*(end-start+1)+start;  //产生一个从st

Cocos2dx 3.0 过渡篇(十五)帧动画的存储播放

前两篇博文用恶搞的形式写了action的相关使用,这算是自己的一种尝试,也可以说是心情的发泄.本篇是action三板斧的最后一板,经过深思熟虑后,我决定就用正常人的方式写吧... 这次主要介绍动画的创建即存储,要实现的功能有:1.创建四组动画,并存放至Array中: 2.创建四个虚拟方向按钮,控制精灵移动与播放相应方向的动画: -------------------------------------------------------------------------------------

Cocos2dx 3.0 过渡篇(十三) action的用法从一个故事说起

本篇博客来自star特530,转载请注明出处.http://blog.csdn.net/start530/article/details/20153367-------------动作到底该怎么玩?说的也就是runAction这货了.如果你觉得本文还是在写像MoveTo,SacleTo这类动作的用法的话,那你就错了.那样不够厚道.当然了,像Sequence,Spawn这类的东西多少也是会涉及到一点的.那到底要写什么呢?我们的故事从这里开始. 首先我们创建俩精灵,就命名为boy 和 girl 吧.

Cocos2dx 3.0 过渡篇(十)资源加载进度条Loading...

尊重原创,转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/19420317 本来这篇博文是昨晚就要写的,可是因为今早要去参加考驾照相关的体检,而我最害怕的就是视力没能达到5.0,毕竟这阶段对着屏幕的时间过久. 所以呢,昨晚我几乎没碰电脑,没玩手机,早睡早起.体检顺利通过! 首先,我要说的是:这次我要写的主题是进度条. 额,等等,先收起你手里愤怒的西瓜刀.我也才知道TestCpp也有这个例子啊.不过Test

Cocos2dx 3.0 过渡篇(二) 事件回调

尊重原创,转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/18216679 3.0 后的事件回调函数接口都不一样了,例如按钮的menu_selector(),update的 schedule_selector等,都已成明日黄花.而新的回调接口,则由四个CC_CALLBACK取代. 下面先举例一些不同的调用方法: 1.按钮:CC_CALLBACK1 [cpp] view plaincopy 2.0   Me

Cocos2dx 3.0 过渡篇(三) 触摸机制

尊重原创,转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/18325493 本来在中午休息时间打算大展拳脚,好好写一篇新触摸机制相关的博文,结果,等真正下手的时候才发现无从下手,很多地方自己都说不清,赶紧看了下testCpp,才发现原来是这样,还可以这样,哦?这样都行?哎,我还是太年轻了.   咱也只能挑简单的讲了. 假设要实现拖动一个精灵移动,那我们的步骤是: 1. 创建一个精灵sprite: 2.一个