Cocos2d x 下的場景,層,精靈

2021-06-22 23:32:46 字數 3247 閱讀 8030

cocos2d的場景是用來裝載層,精靈的容器。可以向場景中新增層和精靈。層和精靈之間可以互相新增。

層,精靈,以及場景都是繼承自節點cnode的類,因此在以遊戲為根節點的樹上他們都是子節點。如果乙個精靈新增到了乙個層,而該層新增進入了場景,那麼移動這個層的時候就會使得層中的場景一起運動。(但是如果層中的精靈節點自身已經加入到了場景,那麼它作為場景的子節點,儘管他可能是層類的乙個成員,在移動層的時候,它也不會隨著層一起運動)。

因此在封裝類的時候也就有許多的方法,比如以乙個類魚,魚有血量條,有編號,那麼將魚封裝成乙個類的時候,可以使魚的編號,血條都作為魚的節點,新增為魚類例項的子節點,在將魚類的例項加為場景的子節點,這樣一來,操作魚的例項,其下的精靈都會跟著變化。

當然有的時候,需要將精靈分開控制,以實現各自不同的動作,根據實際需要做。

場景的初始化:

ccscene *pscene = gamescene::create();
場景通過導演類的單例呼叫函式來執行。乙個遊戲往往由多個場景組合。不同場景間的切換,可以直接切換也可以在切換過程中使用特效。

ccdirector::shareddirector()->replacescene(cctransitionsplitrows::create(0.5, pscene));
切換的過程要完成就的場景清除,但場景的載入,需要一定時間,此時要關掉過載的更新函式update呼叫,防止錯誤引用變數。

層的初始化

一般情況下會先建立乙個層,封裝乙個繼承至cclayer的gamelayer基類。然後將其加入到場景。

精靈初始化:

精靈的建立方式很多,主要使用就是以下幾種:

1.直接使用建立,這種方式對於只少量和短期使用的精靈有用,如果精靈數量加大,並且精靈的體積大就非常影響效率。

ccsprite *m_sprite = ccsprite::create(「***.png」);
2.使用ccspritebatchnode,當初始化的精靈在場景內可能被大量渲染時,就是他來初始化。載入時,長和寬是按照2的冪來計算的,因此即使比最接近正數冪小很多,也會占用多餘的資源,比如1044*768將會按照2048*1024載入。因此解決這個問題的方法就是將一些相關的拼接成一張大圖,並且記錄每張小圖在大圖內的尺寸和位置資訊。cocos2d下一般使texturepacker工具來拼接,生成乙個png和對應的plist檔案。

ccspriteframecache::sharedspriteframecache()->addspriteframeswithfile("sence\\bobms.plist","sence\\bobms.png");
將大圖和解析載入到記憶體中。

ccarray* spriteframes = ccarray::create();

//用相應的名字將取出

ccstring* filename1 = ccstring::createwithformat("hailang1.png");

ccspriteframe* spriteframe0 = ccspriteframecache::sharedspriteframecache()->spriteframebyname(filename1->getcstring());

//放入陣列

spriteframes->addobject(spriteframe0);

for (int i = 2; i <= 4; i++)

else

} //生產動畫類

ccanimation* fishanimation = ccanimation::createwithspriteframes(spriteframes); //使用精靈框幀建立動作類

fishanimation->setdelayperunit(0.4);

//給每乙個動畫起個名字,為了以後將動畫取出

//將動畫類的物件放入系統的快取中,以鍵值對的形式

ccanimationcache::sharedanimationcache()->addanimation(fishanimation, "hailangam");

ccspriteframecache::sharedspriteframecache()->addspriteframe(spriteframe0,"hailangsf");//將動作放入快取對應名稱

取出時的步驟如下:

ccspriteframe *m_frame1 = ccspriteframecache::sharedspriteframecache()->spriteframebyname("hailangsf");

ccsprite *m_sprite = ccsprite::createwithspriteframe(m_frame1);

m_sprite->setanchorpoint(ccp(0.5f, 0.5f));//設定錨點,

ccstring* animationname = ccstring::createwithformat("hailangam");

ccanimation *animation = ccanimationcache::sharedanimationcache()->animationbyname(animationname->getcstring());

ccanimate *animate = ccanimate::create(animation);

m_sprite->runaction(ccrepeatforever::create(animate));

使用ccspritebatchnode:

cctexture2d *texture = cctexturecache::sharedtexturecache()->addimage("sence\\bullets.png");

this->setbatchnodebullets(ccspritebatchnode::createwithtexture(texture));

this->addchild(this->m_pbatchnodebullets,5);

將大圖建立為batchnode然後將它加入到主介面作為主介面的指標,最後把大圖所包含的精靈作為

batchnode的子節點使用即初始化完成,帶框幀動畫的精靈也是一樣。

至此基本上講完了常用的精靈建立方法,今後有好的方法在介紹。

COCOS2DX 場景與層

runscene scene 啟動第乙個場景時使用 popscene 與pushscene配合使用,可以回到上乙個場景 poptorootscene 與pushscene配合使用,可以回到根場景 2.場景過渡動畫 由transitionsecene和它的子類展示 3.場景的生命週期函式 ctor建構...

cocos2d x建立精靈

建立精靈 方法一 有一張檔案建立 l ocal spritename cc.sprite create test.dog cc.sprite會自動將檔案載入為紋理,並用於初始化精靈 精靈還可以僅顯示的一部分 l ocal spritename cc.sprite create test.png cc...

cocos2d x中的精靈

所有的遊戲都有 sprites 精靈,你可能知道或者不知道它們是什麼。精靈就是遊戲中在場景裡進行移動的物件。你可以操縱它們。精靈可能是遊戲中最主要的角色。我知道你在想什麼 難道每乙個圖形物件都是精靈sprite嗎?當然不是!為什麼?當你操縱乙個精靈的時候,它就是乙個精靈。如果你不對它進行操作,那它就...