Cocos2d x初始化物件和銷毀物件函式執行順序

2021-09-30 10:14:11 字數 1611 閱讀 6865

在cocos2d-x中有建構函式,析構函式,init,onenter,onexit,他們的執行順序如何呢?

菜鳥的我進行了簡單的測試,借用helloworld工程來測試

//在helloworld.h中進行宣告和定義建構函式和析構函式

class helloworld : public cocos2d::cclayer

~helloworld()

virtual void onenter()

virtual void onexit()virtual bool init()

};

//在helloworld.cpp中的scene方法進行順序除錯

ccscene* helloworld::scene()

while (0); // return the scene return scene;}

//程式結果

執行helloworld *layer = helloworld::create();scene->addchild(layer);

結果為

scene()

helloworld()

init()

onenter()

執行

helloworld *layer = helloworld::create();
結果為

scene()

helloworld()

init()

~helloworld()

執行

helloworld *layer = new helloworld;
scene->addchild(layer);
結果為

scene()

helloworld()

onenter()

執行

helloworld *layer = new helloworld;
結果為

scene()

helloworld()

執行

helloworld *layer = new helloworld;scene->addchild(layer);
結果為

執行

scene()

helloworld()

onenter()

綜上所述呼叫create會執行new()->init()呼叫addchild會執行onenter()而執行new是會少執行一步init()onenter和onexit可以執行多次,但是init和建構函式,析構函式卻只能執行一次onexit會在場景退出的時候執行也就是執行replacescene()的時候析構函式在手動delete乙個ccobject物件會觸發析構函式**記憶體。或者在乙個ccobject區域性物件生命週期到了之後

cocos2d x 聲音,粒子,資料本地化

資料本地化 stl裡面的string a a.str c 可以轉換為char cocos2d裡面的是 string gettostring remove是吧乙個陣列中某乙個數刪除了,把這個數後面的所有數字都向前移一位。fastremove就是吧最後 乙個複製乙份填補到前面刪除的那乙個位置 xml檔案...

Cocos2d X中的聲音和音效

在玩遊戲時都會有各種遊戲音,如啟動遊戲時會有背景音,勝利或者失敗會有一些音效。在cocos2d x中能夠使用cocosdenshion實現各種聲音 在使用cocosdenshion之前須要在程式中加入乙個標頭檔案和乙個命名空間 include audioengine.h using namespac...

物件初始化器和集合初始化器

c 語言開發團隊在c 3.0中增加了乙個名為 物件初始化器 object initializer 的特性 它能初始化乙個物件中的所有允許訪問的字段和屬性。別以為這和你沒關係。我們先來看乙個你非常熟悉不過的 user operator new user operator.id 1 operator.p...