CCAction【動作】就是行為
在特定時間內完成移動、縮放、旋轉等操作的行為,
CCNode可以通過runAction方法【執行動作】來實現動畫效果,
動作的每個子類都封裝了不同的動作效果。
CCAction的繼承結構圖
另外兩個非常重要的子類是:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+y7LKsbav1/coQ0NBY3Rpb25JbnN0YW50KbrNvOS49Lav1/coQ0NBY3Rpb25JbnRlcnZhbCmjrDwvcD4KPHA+y/zDx9PWsPy6rMHLt8ezo7bgtcTX08Dgo6zDv9K7uPbX08Dgtry21NOmuMPXxdK71ta+38zltcS2r9f3ob7Ssr/Jv7TSssrH1Mu2r6Gitq+7raG/PC9wPgo8cD48c3Ryb25nPtei0uJDQ0FjdGlvbrrNQ0NGaW5pdGVUaW1lQWN0aW9uysez6c/zwOA8L3N0cm9uZz6jrDwvcD4KPHA+1ru2qNLlwcvSu9Cpu/mxvsr00NS6zbe9t6ijrDwvcD4KPHA+yrW8ysq508PKsaOs0qq0tL2oxuTX08Dgtq/X96OsPC9wPgo8cD7Iu7rztffTw0NDTm9kZbXEcnVuQWN0aW9ut723qKOs1rTQ0NDo0qq1xLav1/ehoravu62hotTLtq+hozwvcD4KPHA+PGJyPgo8L3A+CjxoMT685Lj0tq/X96Gi09azxrrEyrG2r9f3o6zWuLav1/e1xM3qs8nSqs/7usTSu7aotcTKsbzkxqw8L2gxPgo8cD7Q6NKqvq25/dK7ts7KsbzkssXE3M3qs8m1xNK70Km2r9f3o6w8L3A+CjxwPsv509C1xLzkuPS2r9f3try8zLPQ19RDQ0FjdGlvbkludGVydmFsoaM8L3A+CjxwPrHIyOdDQ0FjdGlvblJvdGF0ZUJ5oaJDQ0FjdGlvblJvdGF0ZVRvoaJDQ0FjdGlvbk1vdmVCeaGiQ0NBY3Rpb25Nb3ZlVG+jrL/J0tTU2ta4tqjKsbzkxNrQ/deq1ri2qLXEvce2yDwvcD4KPHA+PHN0cm9uZz7XotLio7pCecrHz+C21MG/o6xUb8rHvvi21MG/PC9zdHJvbmc+PC9wPgo8cD48c3Ryb25nPjxpbWcgc3JjPQ=="/uploadfile/Collfiles/20140907/2014090709160254.png" alt="\">
// 1秒內順時針旋轉360° CCActionRotateBy *rotate = [CCActionRotateBy actionWithDuration:1 angle:360]; [sprite runAction:rotate];
間隔動作的繼承結構圖:(cocos2d V3版類名已經全改為CCAction開頭)
常見的CCActionInterval的子類:
閃爍效果
// 5秒內閃爍20次 CCActionBlink *blink = [CCActionBlink actionWithDuration:5 blinks:20]; [sprite runAction:blink];
CCActionMoveBy是移動一段固定的距離(相對的距離),
CCActionMoveTo是移動到指定的位置(絕對目標位置)
// 在1秒內,向右移動100單位,同時向上移動80單位 CCActionMoveBy *moveBy = [CCActionMoveBy actionWithDuration:1 position:ccp(100, 80)];
// 在1秒內,從節點的當前位置移動到笛卡爾坐標系中(100, 80)這個位置 CCActionMoveTo *moveTo = [CCActionMoveTo actionWithDuration:1 position:CGPointMake(100, 80)];
CCActionRotateBy是在當前旋轉角度的基礎上再旋轉固定的角度,
CCActionRotateTo是從當前旋轉角度旋轉到指定的角度
假設精靈在初始化的時候已經CW clockwise順時針旋轉了45° degreesprite.rotation = 45;
如果使用了CCActionRotateBy
CCActionRotateBy *rotateBy = [CCActionRotateBy actionWithDuration:1 angle:90]; [sprite runAction:rotateBy]; // 在1秒內,順時針旋轉90°,那麼sprite的最終旋轉角度是45° + 90° = 135°
CCActionRotateTo *rotateTo = [CCActionRotateTo actionWithDuration:1 angle:90]; [sprite runAction:rotateTo]; // 在1秒內,順時針只要旋轉45°,就可以轉到90°了,因為指定了sprite的最終旋轉角度就是90°
CCActionScaleBy是在當前縮放比例的基礎上再縮放一定的比例,
CCActionScaleTo是從當前縮放比例縮放到指定的比例 (相對於原始大小)
假設精靈在初始化的時候的縮放比例為0.8
sprite.scale = 0.8;
CCActionScaleBy *scaleBy = [CCActionScaleBy actionWithDuration:1 scale:0.5]; [sprite runAction:scaleBy]; // 在1秒內,寬度和高度再縮小50%,那麼相對於原始大小,sprite最終縮放比例是0.8 * 0.5 = 0.4
CCActionScaleTo *scaleTo = [CCActionScaleTo actionWithDuration:1 scale:0.5]; [sprite runAction:scaleTo]; // 在1秒內,寬度和高度縮小為0.5倍,那麼sprite最終縮放比例是就0.5
CCActionFadeIn是淡入,即由暗轉亮,從沒有到有;
CCActionFadeOut是淡出,即由亮轉暗,從有到沒有;
CCActionFadeTo用來修改Node的opacity不透明度
opacity 255為完全不透明,即完全可見
// 在2秒內,從沒有到有 CCActionFadeIn *fadeIn = [CCActionFadeIn actionWithDuration:2]; // 在2s內,從有到沒有 CCActionFadeOut *fadeOut = [CCActionFadeOut actionWithDuration:2]; // 在2s內,不透明度變為120,即變為半透明 (不透明度opacity取值范圍是0-255) CCActionFadeTo *fadeTo = [CCActionFadeTo actionWithDuration:2 opacity:120];
重復執行某個動作,可以指定重復的次數
// 1秒中順時針旋轉360° CCActionRotateBy *rotateBy = [CCActionRotateBy actionWithDuration:1 angle:360]; // 重復執行2次旋轉動畫 CCActionRepeat *repeat = [CCActionRepeat actionWithAction:rotateBy times:2]; [sprite runAction:repeat];
按順序地播放圖片,可以實現幀動畫。
To be continued...