(1)
從代碼的角度講,行為action其實就是改變實體結點的屬性,如座標、角度,大小等,這些屬性大部分都可以靠action實體類自身封裝的方法來設定,這些動作都被封裝成一個個具體的類,這樣使得如果要讓一個結點執行一段行為序列或者不斷重複執行一個行為時,編碼變得簡單,那麼就是建立類的執行個體對象就可以了。
行為類的基類是CCAction,任何一種行為都是由它拓展衍變而來的。行為類可以分為四大類:有限次執行類、無限重複行為類、速度行為類和跟隨移動類,其中前兩者的使用頻率最高;而有限次執行類又可以分為瞬時行為類和過程行為類。它們的繼承關係如:
圖中的CCAction是基類,比較抽象,在實際開發中不會直接用到,更多的是在參數傳遞中充當‘泛型’;
CCFiniteTimeAction從字面就能看出來(finite = 有限的),是有限次執行類,它是最為普通的行為,就是按時間順序做一系列事情,做完後行為結束;而它又可以分成兩類動作,區間動作和瞬時動作,如果這些動作屬性是在經過一段時間後修改的,那麼這些動作屬於區間動作:CCActionInterval;否則屬於瞬時動作:CCActionInstance。例如說:move,jump,scale之類的動作就是區間動作了,而place,show,hide這些動作就是瞬時動作了。
CCRepeatForever的名字更易懂了,無限重複行為類,就是說它可以讓節點反覆的做一件事,除非把行為或節點刪除,否則永遠不會停止;
CCSpeed的作用是調整行為執行個體的執行速度,因此它依賴於其它的行為,單獨的CCSpeed沒有意義;
CCFollow可以使節點跟隨指定的另一個節點移動。
CCActionmanager
這個類其實並不屬於行為類,它的父類是NSObject,而不是CCAction,但它又與CCAction密不可分。
CCActionmanager是個標準的單例類,它的作用顧名思義,就是管理行為類的對象,工作原理是:當節點執行runAction時,會把action通過addAction方法將對象傳遞給CCActionmanager的單例,該執行個體再把這個action添加到自己的行為序列中。CCActionmanager通過schedule定時重新整理自己的update方法,在這個方法中去調用行為序列中每個action的step(會有一些篩選條件,比如暫停行為不會update),這些step方法再根據自身的完成進度去update或是結束行為。就是說實際上是由CCActionmanager驅動的每個action去更新自己的邏輯,而runAction方法只是將行為對象添加進CCActionmanager的更新隊列罷了。當節點被清除或是行為結束時,CCActionmanager會自動將action從隊列中剔除,無需開發人員操心
(2)
動作名稱尾碼By的動作稱為相對動作,動作名稱尾碼To的動作稱為絕對動作,前者所有,後者部分有自己動作的reverse反轉動作。
解釋一下By和To的區別:
To:表示絕對。
By:表示相對。
舉例:
CCSprite *sprite = [CCSprite spriteWithFile:@"my.png"]; CCMoveBy *moveBy = [CCMoveBy actionWithDuration:2.0f position:ccp(100, 50)]; [sprite runAction:moveBy];
解釋:其中和By和To有關的是position這個參數。注意到position:ccp(100,50)
①假如是By的話,表示相對,那麼意思是:相對於我當前的節點,向右移動100個單位,向上移動50個單位。 ②假如是To的話,表示的是絕對,那麼意思是:節點移動到座標為(100,50)的位置,那麼這裡相對的計算螢幕的零點位置來說的。 (這裡的節點是sprite)
(3)動作的分類和使用
1、和位置有關的動作
(1) CCMoveTo/CCMoveBy :運動
(2) CCJumpTo/CCJumpBy :沿拋物線跳躍運動
(3) CCBezierTo/CCBezierBy :沿貝茲路徑運動(什麼是貝茲路徑請Google)
(4) CCPlace :將節點對象直接放置在所需的位置
2、和大小有關的動作
(1) CCScaleTo/CCScaleBy :放大或者縮小到某個特定的比例
3、和旋轉有關的動作
(1) CCRotateTo/CCRotateBy :旋轉
4、和顯示有關的動作
(1) CCShow : 立即顯示節點對象
(2) CCHide : 立即隱藏節點對象
(3) CCToggleVisibility :切換節點對象的可視屬性
(4) CCBlink :在一定時間內閃動特定的次數
5、和透明度有關的動作
(1) CCFadeIn :淡入
(2) CCFadeOut :淡出
(3) CCFadeTo :修改節點對象的透明度到某特定的數值
6、和色彩有關的動作
(1) CCTintTo/CCTintBy :將節點著色到某一特定的RGB色彩值
7、和翻轉有關的動作
(1) CCFlipX :水平方向
(2) CCFlipY :垂直方向
8、組合動作
(1) CCSpawn :使節點同時執行多個動作(組合動作的時間間隔是裡面action時間間隔最長的那個)
(2) CCSequence :使節點順序執行多個動作
(3) CCRepeat :使節點重複執行某個動作
(4) CCRepeatForever :使節點反覆執行某個動作
9、Ease動作:屬於特殊的組合動作,可以修改內部動作的速度
10、延遲動作
(1) CCDelayTime
11、方法回調動作:(後三個有參數)
參數: (N:Node D:Data O:Object)
(1)CCCallFunc
(2)CCCallFuncN
(3)CCCallFuncND
(4)CCCallFuncO
12、塊語句調用動作:(後兩個有參數)
(1)CCCallBlock
(2)CCCallBlockN
(3)CCCallBlockO
13、反轉動作
注意:尾碼是To的動作通常是不支援反轉動作的,尾碼是By的動作通常是支援反轉動作的
(1) CCReverseTimer
(2) [action reverse] 也可以建立反轉動作 但是只有CCActionInterval類型的動作才可以使用reverse方法
14、特殊動作
(1) CCSpeed
(2) CCActionTween
附註:要建立這些動作執行個體時一般採用類方法:actionWith--