CCNode

轉自:http://blog.csdn.net/wujiabin468/article/details/7870838

CCNode是所有節點的父類包括(CCLayer, CCSprite, CCScene)

以下是CCNode的屬性以及方法的介紹(參考:雨鬆MOMO程序研究院)

float rotation_

節點的旋轉角度,如果是圖片的話,會看到旋轉效果,所以基本上是爲屏幕輸出服務的。

float scaleX_, scaleY_

節點的縮放比例,X爲橫向,Y爲縱向,當值爲1的時候表示原比例,0.5表示縮小一半,2表示放大1倍,如果是圖片的話就會看到效果,也是爲屏幕輸出服務的。

CGPoint position_

節點的座標,該屬性是一個結構體,position_.x是它的橫座標,position_.y是縱座標,基本上也是要顯示到屏幕上纔有意義。

float skewX_, skewY_

節點的扭曲角度,類似於Windows畫圖板中的扭曲功能,X是橫向扭曲,Y是縱向扭曲,單位是度數,也是屏顯用的。

CGPoint anchorPointInPoints_

節點的錨點座標,所謂錨點就是當旋轉、縮放或是用其它方式操作節點時的參考的基準點,例如圖片的錨點在正中心,當放大它的時候,圖片就會向四周擴散,當旋轉一個錨點在左上角的圖片時,圖片就會以左上角爲軸旋轉。

CGPoint anchorPoint_

節點的錨點在節點位置的比例,比如說一個節點的座標爲(0, 0),寬高各爲100,那麼當它的錨點座標爲(50, 50)的時候,anchorPoint_.x = 0.5,anchorPoint_.y = 0.5。

CGSize contentSize_

節點的寬高,它也是一個結構體,contentSize_.width表示寬,contentSize_.height表示高,它和position_配合可以用來檢測碰撞,但需要注意,contentSize_不會因爲節點的旋轉和縮放而改變大小。

CCCamera *camera_

節點的鏡頭,cocos2d雖然是2D遊戲引擎,但實際上它是通過3D方式繪製2D效果的,因此有鏡頭存在就不奇怪了。CCCamera也是cocos2d的一個類,它默認情況下是正對着節點的,距離也是剛好使節點能夠以1:1的比例顯示到屏幕上,當我們手動修改它的參數後,節點就會呈現出歪曲或縮放等效果。

NSInteger zOrder_

節點的Z軸,當有多個節點在屏幕顯示時,引擎會根據它們Z軸的大小決定繪製順序,Z軸大的會蓋住Z軸小的。

CCArray *children_

重頭戲來了,前面說過節點可以有N個子節點,children_就是存儲這些子節點地址的變量,節點就是通過它們找到自己的子節點的。children_的類型是CCArray,這是cocos2d自己封裝的一個數組類,每個元素存儲一個子節點地址,它引入了tag機制,當節點有多個子節點時,可以根據它們的tag找到自己想要的那一個。

CCNode *parent_

另一個重點——節點的父節點。因爲樹中的每個節點都繼承自CCNode,所以用CCNode類型定義父節點是最萬無一失的,節點可以通過它找到自己的父節點,因爲父節點最多隻有一個,所以不需要用數組保存。

NSInteger tag_

節點的標籤,主要是幫助其父節點找到自己,因爲每個節點的子節點並不一定是唯一的,當需要遍歷時可以用該參數做區分,所以兄弟節點的標籤儘量不要一樣。

Bool isRunning_

表示節點是否在更新邏輯,之前說過,未加入樹的節點是不會顯示到屏幕上的,其實它的邏輯運算也是一樣,就是說沒有父節點的節點不會顯示,也不會處理自己的邏輯,它的一切活動都會停止。那麼當節點被加入到樹中的時候,isRunning_會被自動置爲Yes,此時它會開始執行自己的運算,當節點離開樹時,isRunning_會被置爲No,如果想在它在樹中的時候暫停運算,就需要將它的isRunning_手動置爲No。

Bool visible_

和isRunning_對應,用來表示節點是否在繪製,當visible_爲No時,節點即使在樹中也不會繪製到屏幕上,就相當於隱藏了起來。

以上就是CCNode比較重要的屬性,不過我們在開發中直接操作它們的頻率並不高,而是通過類中聲明的相關方法去改變它們,下面我就來說說CCNode中的方法。

+(id) node

實例化一個CCnode對象,實際上就是封裝了alloc、init和autorelease方法。

-(id) init

初始化,將一些數值型的參數歸0,縮放比例設爲1,指針型的參數設爲nil。

-(CCArray*) children

返回對象的children_,即獲取全部的子節點。

-(Bool) visible

返回visible_參數,用於檢測該節點當前是否被繪製。

-(void) setVisible: (Bool)visible

設置節點的繪製狀態,Yes爲可見,No爲不可見

-(CCNode*) parent

返回節點的parent_,即獲取父節點

-(void) setParent: (CCNode*)parent

設置父節點,但實際應用中不要這樣修改,因爲極易出bug,正確的修改方法會在後面介紹。

-(NSInteger) tag

返回對象的tag_,即獲取節點的標籤。

-(NSInteger) zOrder

返回對象的zOrder_,即獲取Z軸。

-(Bool) isRunning

返回對象的isRunning_,即檢測該節點當前是否更新邏輯。

-(float) rotation

返回對象的rotation_,即獲取節點的旋轉角度。

-(void) setRotation: (float)rotation

設置對象的rotation_值,即旋轉節點。

-(CGPoint) position

返回對象的position_,即獲取節點的座標。

-(void) setPosition: (CGPoint)position

設置對象的position_,即更改節點的座標。

-(CGPoint) anchorPoint

返回對象的anchorPoint_,即獲取節點的錨點。

-(void) setAnchorPoint: (CGPoint)anchorPoint

設置對象的anchorPoint_,即修改節點的描點。

-(CGSize) contentSize

返回對象的contentSize_,即獲取節點的寬高。

-(void) setContentSize: (CGSize)contentSize

設置對象的contentSize_,即改變節點的寬高。

-(float) skewX

返回對象的skewX_,即獲取節點的橫向扭曲角度。

-(void) setSkewX: (float)skewX

設置對象的skewX_,即設置節點的橫向扭曲角度。

-(float) skewY

返回對象的skewY_,即獲取節點的縱向扭曲角度。

-(void) setSkewY: (float)skewY

設置對象的skewY_,即設置節點的縱向扭曲角度。

-(float) scaleX

返回對象的scaleX_,即獲取節點的橫向縮放比例。

-(void) setScaleX: (float)scaleX

設置對象的scaleX_,即橫向縮放節點。

-(float) scaleY

返回對象的scaleY_,即獲取節點的縱向縮放比例。

-(void) setScaleY: (float)scaleY

設置對象的scaleY_,即縱向縮放節點。

-(CGRect) boundingBox

返回對象的碰撞框(由座標和寬高組合而成),這個參數會隨着節點的縮放或旋轉等操作而改變。

-(CCCamera*) camera

返回對象的camera_,即獲取節點的鏡頭。

-(CCNode*) getChildByTag: (NSInteger) aTag

根據tag_返回children_數組中的某個元素,即根據標籤獲取節點的某個子節點。

-(void) addChild: (CCNode*)child z: (NSInteger)z tag: (NSInteger)aTag

向children_數組中添加一個CCNode對象,即給節點添加一個子節點,z是子節點的Z軸,aTag是子節點的標籤,此方法會將該子節點的parent_指針指向自己,因此這纔是設置父節點的正解,比setParent要安全的多。

-(void) addChild: (CCNode*)child z: (NSInteger)z

-(void) addChild: (CCNode*)child

缺省了tag或z的添加子節點方法,缺省值默認爲0。

-(void) removeFromParentAndCleanup: (Bool)cleanup

將節點從它的父節點的children_數組中刪除,即脫離樹,cleanup表示是否將其從內存中清除。

-(void) removeChild: (CCNode*)child cleanup: (Bool)cleanup

將某一節點從children_數組中刪除,即刪除某一子節點。

-(void) removeChildByTag: (NSInteger)aTag cleanup: (Bool)cleanup

根據tag_刪除children_數組中的某個元素,即根據標籤刪除節點的某個子節點。

-(void) removeAllChildrenWithCleanup: (Bool)cleanup

清空對象的children_數組,即刪除所有子節點。

-(void) _setZOrder: (NSInteger)z

設置對象的zOrder_,即改變節點的Z軸。

-(void) reorderChild: (CCNode*)child z: (NSInteger)z

將某節點從子節點隊列中取出,並重新重新插入隊列,目的是改變其Z軸。

-(void) visit

繪製函數,用來將節點內容(多爲圖片或文字)顯示到屏幕。

-(void) onEnter

相當於一個激活過程,它會在節點被添加到樹中的時候執行,使其可以更新自己的邏輯。

-(void) onExit

取消激活,作用是暫停某節點的邏輯更新。

-(CCAction*)runAction: (CCAction*)action

一個會經常被用到的類,作用是執行一種行爲,行爲模式由參數action決定,CCAction就是上一章提到的行爲類,runAction就是聯繫實體類和行爲類的橋樑。行爲執行完畢後,action會自動釋放(用了autorelease),所以使用時不用擔心內存問題。但需要注意,當isRunning_爲No時,節點執行的行爲會暫停,就是說onExit有暫停節點一切行爲的功能。

-(void) stopAllActions

停止節點正在執行的所有行爲,注意這裏是停止,不是暫停,函數執行後節點中的所有行爲類實例都將從內存中清除。

-(void) stopAction: (CCAction*)action

停止節點的某一個行爲,如果沒有執行該行爲則什麼都不做。

-(void) stopActionByTag: (NSInteger)aTag

根據標籤停止節點的某一個行爲。

-(CCAction*) getActionByTag: (NSInteger)aTag

根據標籤獲取某個正在執行的行爲。

-(void) schedule: (SEL)selector interval: (ccTime)interval

Schedule是cocos2d中的一個很重要的機制,在作者看來它的實用性僅次於行爲類,它的功能和CCAction有相似的地方,都是執行一種行爲;不同之處在於,schedule是通過調用方法來執行邏輯的,而且他它內部還有個計時器,可以每隔一定的時間調用一次,反覆循環,直到手動將其停止或者節點被刪除(暫停)。這裏的參數selector就是執行的方法,interval是間隔時間(秒),ccTime其實就是一個浮點數。

-(void) unschedule: (SEL)selector: (SEL)selector

停止一個schedule任務,注意這裏是停止不是暫停。

-(void) unscheduleAllSeletors

停止所有schedule任務

-(void) resumeSchedulerAndActions

恢復運行節點的行爲和schedule。

-(void) pauseSchedulerAndActions

暫停節點的行爲和schedule。

發佈了1 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章