cocos2d中最常用的類可以大致分為兩部分——實體類和行為類,所謂實體類就是非常容易具體化,我們能夠直觀的感受到的東西,比如桌子、圖片、人,這些是現實中實際存在的,實體類可以說就是對這些東西的類比,當然也有稍微抽象一些的,比如菜單、按鈕,但不管怎麼說我們都很好理解它們的存在;行為類相比之下就顯得很抽象了,它們封裝的主體並不是某一事物(或者說是屬性),而是方法,就是該類的執行個體表示的是實體類的一種行為模式,不同的行為模式需要不同的類來封裝。從語文的角度講,實體類就是主語(誰),行為類就是謂語(做什麼),cocos2d大部分時間都是在圍繞這兩者工作。
cocos2d中的類採用的是樹狀繼承的方式,即最上層的基類只有幾個,拓展功能都是通過一層層的繼承父類來實現的,這樣做便於類於類之間的協作,因為很多介面都是共通的(都來自於基類)。實體類的基類是CCNode(cocos2d的所有類都以CC開頭),它是所有實體類的父類,它內部封裝的參數與方法是整個引擎中出鏡率最高的,可以說是cocos2d的核心(菜單、精靈都是繼承自它)
就是一張節點層級圖了。
節點層級圖是有所有目前活躍的Cocos2D 節點群組成的一個層級圖,又稱情境繼承關係圖,除了情境本身,其他節點只有一個父節點,但是可以有任意個子節點;將節點添加到其他節點中時,就在構建節點情境圖了。
如果一個遊戲可以正常運行,那麼頂層一定是一個情境Scene,接著就是層Layer,Layer的下一層的節點才是遊戲中的主要元素,他們大多是精靈sprite。
節點層級的作用在於,對某個節點施加的影響將會影響到他所有的子節點。
例如,當節點執行了一個set開頭的方法(即賦值方法)或某種行為時,產生的效果並不僅限於該節點,也包括它的所有子節點,以開頭的樣本圖為例,當節點1執行了setPosition方法後,節點1、2、3、4、5、6都會發生位移,但如果是節點2執行的setPosition,那麼只有節點2、4、5會移動,節點1、3、6不會受影響。善用這點的話會使開發更加省力,反之則會給自己增添不少麻煩,所以在設計樹的結構時需要動些腦筋(當然作者認為這樣還是利大於弊的)。
行為類則大部分繼承自CCAtion,它的子類執行個體可以讓一個CCNode對象執行一個行為,比如旋轉、移動,甚至是自訂的行為,一個CCNode可以同時執行多個行為或是按順序執行一個行為序列,有了這些類,開發人員就可以在遊戲中輕鬆加入各種華麗的效果了。
有了CCNode和CCAction,我們是不是就可以開發遊戲了呢?還不行,我們還需要一個乘納它們的舞台。比如我們建立一張圖片,並賦予它一個移動的行為,但是我們無法看見它,因為我們並沒有把它顯示到螢幕上,而舞台的作用就是把它上面的演員顯示到螢幕上,呈現給觀眾。cocos2d實現舞台的方式是這樣的:
舞台分為三部分:導演–情境–層。首先,螢幕的顯示是以情境為單位的,我們通過顯示器看到的所有內容都在一個情境中,而層是構成情境的元素,就好比情境是一個舞台,我們通過它觀看遊戲中的世界,而層就是組成舞台的各種背景,比如遠近、近景、字幕。當一段故事講完後,我們可能需要切換到另一個舞台來講述下一段故事,在戲劇中通常是拉上大幕,在幕後切換背景,然後再拉開大幕,在cocos2d中也是這個步驟,而完成這一工作的就是導演。導演類負責情境間的切換,情境負責將遊戲中的元素呈現給玩家,而層負責容納元素以及接收玩家的輸入資訊。
下面再介紹一些基本的概念:
什麼是錨點?
錨點的預設位置是在紋理映像的幾何中心位置。
通常對節點的設定的position位置屬性是相對於錨點來說的,所以當在設定節點位置的時候,節點中心的位置就是所設定的座標位置。
當然你也可以修改錨點的位置,範圍從(0,0)到(1,1)
在cocos2d,每個初始化方法都分別踢狗了執行個體方法和類方法,其實,類方法是調用了執行個體方法來初始化對象,並建立一個自動釋放記憶體的對象。對於開發人員來說,一般情況下直接使用類方法來建立對象就可以了,這裡其實就是Factory 方法模式。
CCNode 結點類
作用主要有:
①添加add 去除remove 子節點
②通過定時器預定訊息(schedule unschedule等)
③執行動作(runAction,stopAction等)
注意預設CCNode結點的錨點值是(0,0),也即是在結點的左下角
可以用 _cmd 關鍵字停止當前方法的預定
在初始化節點的時候是採用預指派至的策略(lazy loading),即在初始化方法中就盡量把遊戲情境中用到的sprite,label,menu等對象建立好,如果不想立即顯示,就把那些節點的visible屬性設定為NO ,這種做法有助於提高遊戲的效能。
CCScene情境類
它是CCNode的子類,也是一個抽象類別。事實上,CCScene和CCNode幾乎完全相同,唯一的差異在於:CCScene的錨點預設位置在螢幕的幾何中心。
CCScene類基本上沒有附加任何邏輯機制和特殊功能,通常構建CCScene作為其他所有節點的父結點,看做是CCLayer對象的容器。
如果要實現各種情境的切換,通常來說如視圖跳轉,都必須基於CCScene的情境切換
CCTransitionScene 情境切換 支援情境過渡效果
CCLayer層類
它是螢幕上可繪製的地區,作為精靈節點和其他節點的容器,他同時可以接受觸摸輸入和加速計輸入的資訊。
CCLayerColor 色彩層 :可以設定填充顏色的層
CCLayerGradient 漸層色層
CCMenu 菜單類 :繼承自CCLayer,是一個菜單管理選擇的畫面層,該畫面以menu對象為集合類,由MenuItem類執行個體組成。
CCMenuItem類執行個體組成各種按鈕,同時CCMenu 只支援CCMenuItem節點作為他的子節點
注意:CCMenuItem是基礎類,不能直接用來建立菜單,他的作用主要是用來設定按鈕的狀態以及處理回調方法。需要使用CCMenuItem的子類來建立定製功能表項目。
CCMenuItem的子類有:
CCMenuItemLabel
CCMenuItemAtlasFont
CCMenuItemFont
CCMenuItemSprite
CCMenuItemImage
CCMenuItemToggle
CCTexture 紋理類
遊戲運行過程中,所有的影像檔都被載入為GPU[英文全稱Graphic Processing Unit,中文翻譯為“圖形處理器”]可以理解的OpenGL ES 紋理。
Cocos2d內建一個紋理緩衝管理器(CCTextureCache)來儲存這些紋理圖
注意,映像填充到紋理中時,其長度和寬度都必須是2的N次方。
CCTexture(紋理)
CCTextureAtlas(紋理圖集):紋理圖集只是一個大的紋理圖而已,他包含所有的映像。
CCTextureCache(紋理緩衝):作為單例使用,用於載入和管理紋理
CCSprite精靈類
一般,精靈來自映像,一旦映像載入記憶體中,就會將精靈轉換成紋理圖
CCSpriteBatchNode 精靈表單,其中包含的CCSprite
CCSpriteFrame 精靈幀
CCSpriteFrameCache精靈幀緩衝(單例),其中包含的是CCSpriteFrame
CCDirector導演類
單例,用於儲存cocos2d的全域配置設定,同時管理cocos2d情境
以上部分內容參考http://www.xuanyusong.com/archives/category/ios/cocos2d_game