天天看點

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

前兩天有人問我說在3.0 beta2版本裡,使用array 後編譯出錯,其實是因為自beta版本開始,已沒有array,取而代之的是容器:vector 和 map

先說vector吧。

如果說c++的vector容器怎麼用,如果我說太多肯定一下子就暴露了我菜鳥的身份。是以呢,在這裡不過多闡述,也請大神繞路。

是以,還是回到vector的使用問題上吧。該怎麼用?既然vector是替代了array,那就拿array 和vector進行對比吧。

下面我就以建立 sprite 精靈對象的容器為例介紹吧

1、建立

先建立兩個精靈:

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

auto sp1 = sprite::create("closenormal.png");  

sp1->setposition(point(100,100));  

this->addchild(sp1,1);  

auto sp2 = sprite::create("closeselected.png");  

sp2->setposition(point(100,200));  

this->addchild(sp2,1);  

   建立容器

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

alpha:  

    auto sp_array = array::create();  

beta:  

    vector<sprite*> sp_vec;  

2、将建立好的精靈添加進容器中

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

alpha:  

    sp_array->addobject(sp1);  

    sp_array->addobject(sp2);  

    sp_vec.pushback(sp1);//和 堆棧 一樣一樣的  

    sp_vec.pushback(sp2);  

3、獲得容器中的大小

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

    int count = sp_array->count();  

    int count = sp_vec.size();  

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

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

    for(int i=0;i<sp_array->count();i++)  

    {  

        auto sp = (sprite*)sp_array->getobjectatindex(i);  

        sp->runaction(moveto::create(0.2f,point(100,100)));  

    }  

    for( auto& e : sp_vec)

    {

        e->runaction(moveto::create(0.2f,point(100,100)));//這種for寫法是c++

11的新特性

    }

5、删除容器中的精靈

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

//如果是要删除容器中最後一個精靈的話:  

    sp_array->removelastobject();  

    sp_vec.popback();  

//如果是直接删除對象:  

    sp_array->removeobject(sp1);  

    sp_vec.eraseobject(sp1);  

//如果是要删除容器中全部的對象:  

    sp_array->removeallobject();  

    sp_vec.clear();  

6、其他

”說破不值錢“,其實vector也就那樣啦,恩,那樣...最後補充一些其他的用法:

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

//a 在容器中的任何一個位置插入對象:  

sp_vec.pushback(sp1);  

sp_vec.pushback(sp2);  

//目前的情況是,sp1在容器的第一個位置,sp2在容器的第二個位置,這時候我們要将sp3放入第一個位置:  

sp_vec.insert(0,sp3);//ok  

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

恩,時間不多,先寫到這吧。昨晚才去了解beta裡的vector,如果有什麼寫錯的地方或者用的不恰當的地方,敬請告知...

繼續閱讀