節點類是cocos2d-x一個主要的類,繼承於CCObject。從遊戲角度上來說,所有需要在屏幕上渲染的對象都是節點類。同時CCNode是cocos2d-x的渲染鏈,一般來講Cocos2D-x同時只能渲染一個CCScene,因此CCScene是渲染的根節點。 在構建遊戲時一般是:一個Scene中添加一個或者多個CCLayer;一個Layer中又添加多個CCSprite或者CCMenu;CCSprite中還可以添加CCParticleSystem(粒子系統)等等。這樣就構建了一個渲染樹,cocos2d-x遍歷這個樹,來將圖像顯示在屏幕上。渲染的過程之中層的各個Child按照zOrder排序,以保證渲染的正確性。
最常用的節點類包括:CCScene,CClayer,CCSprite,CCMenu這些都是必不可少的成員.
CCNode的特性是最簡單,但是也是應用最廣泛的,因爲遊戲中所有的對象都是他的子類,所以有必要搞清楚CCNode類的一些屬性,其中有
- 位置
- 縮放尺寸
- 旋轉角度
- 攝像機朝向
- 模型網格
- 錨點
- 尺寸
- 是否可見
- Z座標
- openGL Z座標
這些屬性其實就是一個類中的一些成員變量.
有成員變量就一定會有成員函數。CCNode設置這些屬性有三個最重要的三類成員函數
1,類對象的初始化和內容
2,時間回調函數
3,重載繪製函數
cocos2d-x作爲一個強悍的遊戲引擎,一個類所包含的類成員函數一定很多。我在這裏只是介紹一些常用的函數
- addchild(ccnode* child);
- addchild(ccnode*child,int zorder);
- addchild(ccnode*child,int zorder,int tag);
addchild有三個這樣的重載的函數 這個功能最多的用在CClayer這個子類中。
因爲遊戲中把相關的一些對象都放在一個CCLayer中顯示,實際開發中程序猿創建一個CCLayer 然後通過靜態函數創建一個CCSence添加到這個層中。
至於以後要具體要顯示的精靈或者粒子系統又或者動作都是以CCNode的子類對象通過addchild函數添加到層中繪製
這裏需要說明的是在二維平面世界除了X和Y軸以外 Z軸被用來描述的物體之間的遮擋關係也就是addchild函數的第二個參數 int zorder。這裏需要記住的是一個CCNode的子類其Z軸座標越小,就會離屏幕越遠,這個對象被遮擋的可能性越大
- virtual void onenter
- virtual void onentertransitiondidfinish
- virtual void onexit
- virtual void onexittransitiondidstart
這些函數常常用在CCSence這個類中 onenter和onexit這兩個函數主要是在進入場景和退出場景的時候做一些初始化工作和清理工作,這兩個函數是隻要切換場景時就會被自動調用的。
但是onentertransitiondidfinish和onexittransitiondidstart是否會被調用取決於在場景轉換的時候時候使用的特效,也就是CCTransitionSence函數。
- runAction(ccaction* action)
這個函數常常被使用在CCSprite類中。自己製作了一個動作,但是這個動作如果你不綁定一個精靈,你是無法看到實際的運動效果。
假設一個人是一個精靈my,你製作了一個跑步的動作run,需要時人來執行。
則調用:my->runAction(run);這樣在遊戲中,你就可以看到人走路的效果。
接下來要介紹的一個比較智能的函數,就是時間回調函數既和定時器有關的函數
- void schedule(SE_SCHEDULE selector)
SE_SCHEDULE這個是一個選擇器 類似於C++中的一個類函數指針的機制,用來創建一個函數指針。其實參數就是你需要定時需要執行的函數指針。
由於cocos2d-x繼承了cocos2d-iphone的代碼風格,因此它提供了一些Objective-c中創建選擇器的語法宏,用來創建函數指針。
- schedule_selector()
- callfunc_selector()
- callfuncN_selector()
- callfunc_selector()
到這裏已經介紹了需要介紹的CCNode的比較常用的內容和屬性。需要說明的是:學好cocos2d-x就必須要搞清楚它的框架和繼承關係,從根源學習到細末這裏我只是介紹了簡單和常用的函數具體其他的函數可以查閱相關專業書籍。