上一篇博客介绍了即时动作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()方法就可以运行。
以上。