轉自: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。