閱讀440 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Cocos2dx 3.0 過渡篇(八)淺談容器Vector

尊重原創,轉載請注明來自:star特530的CSDN博客 https://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、創建

先創建兩個精靈:

  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  1. Alpha:  
  2.     auto sp_array = Array::create();  
  3. beta:  
  4.     Vector<Sprite*> sp_vec;  

2、將創建好的精靈添加進容器中

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

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

4、獲得容器中的精靈,並讓這些元素都做統一的動作

  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、刪除容器中的精靈

  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也就那樣啦,恩,那樣...最後補充一些其他的用法:

  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,如果有什麼寫錯的地方或者用的不恰當的地方,敬請告知...


轉載請聲明原創地址:https://blog.csdn.net/start530?viewmode=contents

最後更新:2017-04-03 12:56:16

  上一篇:go ubuntu 13.10 配置mysql5.5編碼
  下一篇:go C# WinForm多線程開發(三) Control.Invoke