上一篇博客介紹了即時動作ActionInstant,與即時動作相對的是持續動作ActionInterval。顧名思義,持續動作就是需要一段時間來持續執行的動作,並且在有限時間內改變執行對象的一些屬性。因此持續動作的靜態生成函數,往往附帶一個時間值。
持續動作ActionInterval類的子類如下:
一.簡單的持續動作
可以看到,很多持續動作類名都有後綴To或By。這兩種後綴有什麼區別呢?To表示動作最終達到的目標值,By表示動作的增量值,如:
auto _moveTo = MoveTo::create(3.0,Vec2(900,600));//表示花3.0秒,按向量(900,600)移動一段距
auto _moveBy = MoveBy::create(3.0,Vec2(900,600))//表示花3.0秒,移動到座標(900,600)
另外,除移動外,簡單的持續動作還包括縮放、旋轉、跳躍等等,舉一些常用的例子:
//縮放動作
auto _scaleTo = ScaleTo::create(3.0,2));
//旋轉動作
auto _rotateTo = RotateTo::create(3.0,60);
//跳躍動作
//參數:1.執行時間 2.終點座標 3.跳躍高度 4.跳躍次數
auto _jumpTo = JumpTo::create(3.0,Vec2(),200,4);
//bezier曲線移動動作
//首先創建一個bezier曲線配置
ccBezierConfig ccb;
ccb.controlPoint_1 = Vec2(540,400);//第一個控制點
ccb.controlPoint_2 = Vec2(640,200);//第二個控制點
ccb.endPosition = Vec2(800, 100);//終點
//然後創建bezier動作
auto _bezierTo = BezierTo::create(3.0,ccb);
//執行動作
sprite->runAction(_bezierTo);
//淡入淡出動作
//參數:1.時間 2.透明度
//精靈創建默認透明度255
auto _fadeTo = FadeTo::create(3.0,0);
//延時動作
//一般用於動作間隔
auto _delayTime = DelayTime::create(3.0);
//色彩漸變動作
//參數:1.時間 2.RGB
auto _tintTo = TintTo::create(3.0,255,0,0);
//閃耀動作
//參數:1.時間 2.閃耀次數
auto _blink = Blink::create(3.0,10);
二.複合動作
除了以上簡單的持續動作,我們在Cocos開發中還經常會用到複合動作,當同一個node有多個動作需要組合執行時常常會使用複合動作。複合動作有4種:
1.Sequence 按序列執行多個動作
2.Spawn 同時執行多個動作
3.Repeat重複執行幾次
4.RepeatForever永遠執行
注意,這4種複合動作裏面的動作即可以包含簡單的持續動作,也可以包含即時動作,還可以互相包含複合動作。
以下是這四個複合動作的使用實例:
//先創建幾個簡單動作
//可以是即時動作,也可以是持續動作
auto _blink = Blink::create(3.0,10);
auto _place = Place::create(Vec2(100,100));
auto _scaleTo = ScaleTo::create(3.0,2));
//順序執行一系列動作
//最後參數要爲null,告訴方法已經沒有動作了
auto _sequence = Sequence::create(_blink, _place,_bezierTo,NULL);
//同時執行一系列動作
auto _spawn = Spawn::create(_blink, _place, _bezierTo, NULL);
//重複執行某一動作幾次
//參數:1.動作 2.次數
auto _repeat = Repeat::create(_blink,10);
//永遠重複執行某一動作
auto _repeatForever = RepeatForever::create(_blink);
這些動作Sequence、Spawn、Repeat和RepeatForever等複合動作通過node調用其runAction()方法即可執行。
以上。