之前我們瞭解並且實作簡單的動畫(縮放、跳躍、旋轉、移動),但會發現,一部分的狀況會需要連續型的動畫(一個動畫執行完再接著一下個),或者重覆執行的動畫。
話說多說,就開始來讓精靈們連續動一動。
常用的類別與方法:
CCActionSequence:
透過這一個方法,可以執行陣列中的一個個action,當一個action執行完畢後會再執行下一個,串連動畫事件。
// action1, ... : 放入一個action陣列
// 陣列可以想成是一容器,action陣列就是放入一些action的容器
+ (id)actions:(CCActionFiniteTime *)action1, ...
CCActionRepeat:
指定動畫執行的次數。
// action: 執行的動畫事件
// times: 執行的次數 + (id)actionWithAction:(CCActionFiniteTime *)action times:(NSUInteger)times
CCActionRepeatForever:
指定動畫永遠的重覆執行。
一但讓該精靈永遠重覆執行後就不能再指定下一個所要執行的動畫事件。
// action: 執行的動畫事件
+ (id)actionWithAction:(CCActionInterval *)action
列子如下:
xxxSprite永遠執行淡入淡出的動畫
// 產生一個淡入的動畫
CCActionFadeIn *actionFadeIn = [CCActionFadeIn actionWithDuration:0.5f];
// 產生一個淡出的動畫
CCActionFadeOut *actionFadeOut = [CCActionFadeOut actionWithDuration:0.5f];
// 將淡入、淡出動畫串連
CCActionSequence *actionSequence = [CCActionSequence actionWithArray:@[actionFadeIn, actionFadeOut]];
// xxxSprite執行一個淡入淡出的動畫,並且永遠重覆
[xxxSprite runAction:[CCActionRepeatForever actionWithAction:actionSequence]];
xxxSprite重覆執行兩次(向上彈跳、縮小、向下移動、放大)串接動畫
// 產生一個向上彈跳的動畫
CCActionJumpBy *actionJump = [CCActionJumpBy actionWithDuration:0.5f position:ccp(0.0f, 50.0f) height:25 jumps:2];
// 產生一個縮小的動畫
CCActionScaleBy *actionScale = [CCActionScaleBy actionWithDuration:0.5f scaleX:0.5f scaleY:0.5f];
// 產生一個向下移動的動畫
CCActionMoveBy *actionMove = [CCActionMoveBy actionWithDuration:0.5f position:ccp(0.0f, -50.0f)];
// 產生一個放大的動畫
CCActionScaleBy *actionScaleRestore = [CCActionScaleBy actionWithDuration:0.5f scaleX:2.0f scaleY:2.0f];
// 將向上彈跳、縮小、向下移動、放大動畫串連
CCActionSequence *actionSequence = [CCActionSequence actionWithArray:@[actionJump, actionScale, actionMove, actionScaleRestore]];
// xxxSprite執行一個actionSequencec連續動畫,並且重覆執行兩次
[xxxSprite runAction:[CCActionRepeat actionWithAction:actionSequence times:2]];
之後要使精靈們有連續性動畫的效果,只要透過一個個的動畫包裝,
配合CCActionSequence、CCActionRepeat、CCActionRepeatForever使用,就能讓動畫事件串接連續,使張力效果更佳,也更符合我們所需的要求。