cocos2d 學習筆記

2022-08-01 19:24:10 字數 3519 閱讀 5097

ccdirector類,簡稱director(導演),是cocos2d遊戲引擎的核心。

director是乙個單例:它儲存著 cocos2d的全域性配置設定,同時管理著cocos2d的場景。

director的主要用處如下:

1. 訪問和改變場景

2. 訪問cocos2d的配置細節

3. 訪問檢視(opengl,uiview,uiwindow)

4. 暫停,恢復和結束遊戲

5. 在uikit和opengl之間轉換座標

除了場景本身,每乙個節點只有乙個父節點,但是可以有任意數量的子節點。

在最上面,你總是放置場景節點(myscene),通常跟著的 是乙個層節點(mylayer)。

在cocos2d裡,層節點的作用是接收觸控和加速計的輸入。

所有節點都有乙個共同的父類:ccnode。

它定義了許多除顯示節點外的通用的屬性和方法

ccnode是cocos2d中最重要的類。所有類都繼承自ccnode。ccnode定義了通用的屬性和 方法。

addchild中的z引數決定了節點的繪製順序。擁有最小z值的節點會首先被繪製; 擁有最大z值的節點最後乙個被繪製。如果多個節點擁有相同的z值,他們的繪 制順序將由他們的新增順序來決定。當然,這個規則只適用於像sprites那樣有 視覺表現的節點。

scheduleupdate方法沒有停止預定資訊的功能

如果你想之後停止對某個指定更新方法的預定資訊的話

建議使用

(void) scheduleupdates

-(void) updatetentimespersecond:(cctime)delta

以下**會停止節點的所有選擇器,包括那些已經在scheduleupdate裡面設定 了預定的選擇器:

[self unscheduleallselectors];

以下**會停止某個指定的選擇器(假設選擇器名稱是updatetentimespersecond):

[self unschedule:@selector(updatetentimespersecond:)];

注:此方法不會停止scheduleupdate中設定的預定更新方法。

ccscene物件總是場景圖裡面的第乙個節點。通常ccscene的子節點都是繼承自

cclayer。cclayer包含了各個遊戲物件。

因為大多數情況下場景物件本身不包

含任何遊戲相關的**,而且很少被子類化,所以它一般都是在cclayer物件裡通過+(id)scene這個靜態方法來建立的。

+(id) scene

和場景一樣,層沒有大小的概念。層是乙個組織的概念。比如,如果你對乙個

層使用動作,那麼所有在這個層上的物體都會受到影響。

很多情況下,你可能想知道觸控是在**開始的。因為觸控事件由cocoa touch api接收,所以觸控的位置必須被轉換為opengl的座標。以下是乙個用來轉換坐 標的方法:

-(cgpoint) locationfromtouches:(nsset *)touches

接收加速計事件

和觸控輸入一樣,加速計必須在啟用以後才能接收加速計事件:

self.isaccelerometerenabled = yes;

同樣的,層裡面要加入乙個特定的方法來接收加速計事件:

-(void) accelerometer:(uiaccelerometer *)accelerometer didaccelerate:(uiacceleration *)acceleration

你可以通過加速引數來決定任意三個方向的加速度值。

ccsprite

ccsprite是最常用到的類。它使用把精靈(sprite)顯示在螢幕上。生成 精靈最簡單的方法是把檔案載入進cctexture2d材質裡面,然後將它賦給精 靈。

定位點揭秘

每個節點都有乙個定位點,但是只有當此節點擁有貼圖時,這個定位點才有用。 預設情況下,anchorpoint屬性設定為(0.5,0.5)或者貼圖尺寸的一半。它是 乙個抽象的因素,乙個乘數,而不是乙個特定的畫素尺寸。

anchorpoint定義的是貼圖相對於節點位置的偏移。你可以通過把貼圖的寬和高 乘以定位點來得到貼圖的偏移值。順便提一下,有乙個唯讀的 anchorpointpixels屬性可以得到貼圖的畫素偏移值,所以你不需要自己計算。

舒緩動作

cceaseaction類讓cocos2d的動作更加有用。「舒緩動作」允許你改變在一段時 間內發生的動作效果。例如,如果你在節點上應用ccmoveto動作,此節點在整 個移動過程中將會保持同乙個速度。而如果你使用cceaseaction的話,你就可 以讓節點慢慢啟動,然後加速向目標移動,或者反過來(快速啟動,慢慢減速 到達目標)。或者你也可以讓節點移動到超過目的地一些,然後再**回來。 「舒緩動作」可以幫助你創造出通常很費時間才能做出來的動畫。以下**演 示了如何應用舒緩動作來改變乙個普通動作的行為。rate引數是用來決定舒緩 動作的明顯程度。此引數只有在大於1的情況下才能看到舒緩動作的效果:

// 我想讓mynode在3秒鐘之內移動到100,200座標點

ccmoveto* move = [ccmoveto actionwithduration:3 position:cgpointmake(100, 200)];

// 節點應該慢慢啟動,然後在移動過程中減速

cceaseinout* ease = [cceaseinout actionwithaction:move rate:4];

[mynode runaction:ease];

在上述例子中,舒緩動作是在節點上執行的,而不是在移動動作上執行

ios遊戲首選的格式是png,portable network graphics。它雖然是種

壓縮格式,但是與jpg不同的是,png是無失真壓縮,它將源的所有畫素都保

留了。你也可以把存為無壓縮jpg格式,但是一般情況下同樣的用png格式比無壓縮jpg格式要小一些。不過,這個區別只影響應用程式的大小,它和記憶體的使用無關。

ios裝置使用的arm cpu不支援直接在硬體上做除法,

乘法一般會快一些。

規則一:永遠不要在乙個節點的init方法中呼叫ccdirector的

replacescene方法。規則二:請遵守規則一。不遵守規則的後果是程式崩潰。

director無法容忍乙個節點在初始化的同時進行場景替換。

你可能認為只有cclayer才能接收觸控輸入事件。

實際上,通過直 接使用cctouchdispatcher,你可以讓任何類接收觸控事件。

你只需要在類裡實 現ccstandardtouchdelegate協議或者cctargetedtouchdelegate協議就可以了。

cocos2d學習筆記

粒子系統,使用系統自己的粒子系統的書寫方法 if cclayer init return false cctexture2d fire cctexturecache sharedtexturecache addimage fire.png ccparticlesystem firepartical ...

cocos2d 學習筆記 2

ccspritebatchnode的作用很像cclayer,因為它本身並不顯示在螢幕上。不過 你只能把ccsprite加入ccspritebatchnode。ccspritebatchnode 將乙個檔名作為引數,使用這個引數的原因是所有被新增進 ccspritebatchnode的ccsprite...

cocos2d筆記 cocos2d的單例模式

cocos2d充分使用了單例設計模式,這裡有必要提及它是因為它是經常是討論熱點。大體上說,乙個singleton是乙個類,它在應用使用期中僅僅例項化一次。為了確保如此,就要使用乙個既建立又訪問此物件例項的靜態方法。因此,你不使用alloc init或者靜態自動釋放初始化器 static autore...