数组与字符串三(Cocos2d-x 3.x _Array容器)
"程序=數據結構+算法"
在面向對象的語言中,諸如數組、堆棧、隊列等的結構都被封裝成了特定的類,按照特定數據結構的算法設計起來,這就是容器類。
Cocos2d-x中,能使用的容器類:C++標準容器類、Cocos2d-x中定義的容器類。其中,列表容器類包括:_Array、Vector<T>和ValueVector;字典容器包括:_Dictionary、Map<K,V>、ValueMap和ValueMapIntKey。
_Array 繼承于Ref類,(2.x版本中是CCArray),通過引用計數管理內存。容納的是Ref及子類所創建的對象指針。
實現: 點擊按鈕,響應事件為創建100個精靈。
主要實現代碼:
1、在Helloworld.h文件中聲明
#define MAX_COUNT 100??
即,所用到的_Array容器創建的成員變量的起始容量的值
2、在Helloworld.cpp文件中,
//增加菜單項 點擊之后出現精靈
?auto goItem = MenuItemImage::create(
??"go-down.png",
??"go-up.png",
??CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
?//設置菜單圖片的位置
?goItem->setPosition(Vec2(origin.x + visibleSize.width - goItem->getContentSize().width/2 ,
??origin.y + goItem->getContentSize().height/2));
?auto menu = Menu::create(goItem, NULL);
?menu->setPosition(Vec2::ZERO);
?this->addChild(menu, 1);
?//創建 _Array* 類型的變量list,參數為它的初始容量
?this->list? = __Array::createWithCapacity(MAX_COUNT);
?//list的創建是通過靜態方法創建,如果不調用retain函數,當init函數結束時,會自動釋放,當別的函數中再使用list時,就會報錯
?this->list->retain();
?//所要創建精靈的個數
?for(int i = 0;i < MAX_COUNT; ++i){
??Sprite* sprite = Sprite::create("Ball.png");
??this->list->addObject(sprite);
//觸摸菜單圖標后觸發的函數
void HelloWorld::menuCloseCallback(Ref* pSender)
{
?Ref* obj = nullptr;
?log("list->count() = %d",this->list->count());
?Size visibleSize = Director::getInstance()->getVisibleSize();
?//循環遍歷 容器中的數據
?CCARRAY_FOREACH(this->list, obj) {
?//獲得精靈對象?
??Sprite* sprite = (Sprite*)obj;
??//隨機生成精靈的x、y坐標
??int x = CCRANDOM_0_1() * visibleSize.width;
??int y = CCRANDOM_0_1() * visibleSize.height;
??sprite->setPosition( Vec2(x, y) );
??this->removeChild(sprite);
??this->addChild(sprite);
?}
}
HelloWorld::~HelloWorld()
{
?//前面說過手動設置保持list的內存,現在要手動釋放
?//釋放list里面的所有對象
?this->list->removeAllObjects();
?//釋放list容器對象
?CC_SAFE_RELEASE_NULL(this->list);
}
結果:
?
轉載于:https://www.cnblogs.com/revenge/p/6089302.html
總結
以上是生活随笔為你收集整理的数组与字符串三(Cocos2d-x 3.x _Array容器)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sm4加密 解密(oc)
- 下一篇: UVALive 4035 - Undet