首页 > 代码库 > iOS_31_cocos2d_CCAction

iOS_31_cocos2d_CCAction

CCAction【动作】就是行为

在特定时间内完成移动、缩放、旋转等操作的行为,

CCNode可以通过runAction方法【执行动作】来实现动画效果,

动作的每个子类都封装了不同的动作效果。

CCAction的继承结构图

另外两个非常重要的子类是:

瞬时动作(CCActionInstant)和间隔动作(CCActionInterval),

它们又包含了非常多的子类,每一个子类都对应该着一种具体的动作【也可看也是运动、动画】

注意CCAction和CCFiniteTimeAction是抽象类

只定义了一些基本属性和方法,

实际使用时,要创建其子类动作,

然后调用CCNode的runAction方法,执行需要的动作、动画、运动。


间隔动作、又称耗时动作,指动作的完成要消耗一定的时间片

需要经过一段时间才能完成的一些动作,

所有的间隔动作都继承自CCActionInterval。

比如CCActionRotateBy、CCActionRotateTo、CCActionMoveBy、CCActionMoveTo,可以在指定时间内旋转指定的角度

注意:By是相对量,To是绝对量




<span style="font-size:18px;">// 1秒内顺时针旋转360°
CCActionRotateBy *rotate = [CCActionRotateBy actionWithDuration:1 angle:360];
[sprite runAction:rotate];</span>




间隔动作的继承结构图:(cocos2d  V3版类名已经全改为CCAction开头)










常见的CCActionInterval的子类:

1.CCActionBlink

闪烁效果

<span style="font-size:18px;">// 5秒内闪烁20次
CCActionBlink *blink = [CCActionBlink actionWithDuration:5 blinks:20];
[sprite runAction:blink];</span>


2.CCActionMoveBy和CCActionMoveTo

CCActionMoveBy是移动一段固定的距离(相对的距离),

CCActionMoveTo是移动到指定的位置(绝对目标位置)

<span style="font-size:18px;">// 在1秒内,向右移动100单位,同时向上移动80单位
CCActionMoveBy *moveBy = [CCActionMoveBy actionWithDuration:1 position:ccp(100, 80)];</span>

<span style="font-size:18px;">// 在1秒内,从节点的当前位置移动到笛卡尔坐标系中(100, 80)这个位置
CCActionMoveTo *moveTo = [CCActionMoveTo actionWithDuration:1 position:CGPointMake(100, 80)];</span>

3.CCActionRotateBy和CCActionRotateTo

CCActionRotateBy是在当前旋转角度的基础上再旋转固定的角度,

CCActionRotateTo是从当前旋转角度旋转到指定的角度

假设精灵在初始化的时候已经CW clockwise顺时针旋转了45° degree

<span style="font-size:18px;">sprite.rotation = 45;</span>


如果使用了CCActionRotateBy

<span style="font-size:18px;">CCActionRotateBy *rotateBy = [CCActionRotateBy actionWithDuration:1 angle:90];
[sprite runAction:rotateBy];

// 在1秒内,顺时针旋转90°,那么sprite的最终旋转角度是45° + 90° = 135°</span>

如果使用了CCActionRotateTo
<span style="font-size:18px;">CCActionRotateTo *rotateTo = [CCActionRotateTo actionWithDuration:1 angle:90];
[sprite runAction:rotateTo];

// 在1秒内,顺时针只要旋转45</span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">°,就可以转</span><span style="font-size: 18px;">到90°了,因为指定了sprite的最终旋转角度就是90°</span>

4.CCActionScaleBy和CCActionScaleTo

CCActionScaleBy是在当前缩放比例的基础上再缩放一定的比例,

CCActionScaleTo是从当前缩放比例缩放到指定的比例 (相对于原始大小)

假设精灵在初始化的时候的缩放比例为0.8

<span style="font-size:18px;">sprite.scale = 0.8;</span>

如果使用了CCActionScaleBy
<span style="font-size:18px;">CCActionScaleBy *scaleBy = [CCActionScaleBy actionWithDuration:1 scale:0.5];
[sprite runAction:scaleBy];
// 在1秒内,宽度和高度再缩小50%,那么相对于原始大小,sprite最终缩放比例是0.8 * 0.5 = 0.4</span>

如果使用了CCActionScaleTo

<span style="font-size:18px;">CCActionScaleTo *scaleTo = [CCActionScaleTo actionWithDuration:1 scale:0.5];
[sprite runAction:scaleTo];
// 在1秒内,宽度和高度缩小为0.5倍,那么sprite最终缩放比例是就0.5</span>

5.CCActionFadeIn和CCActionFadeOut和CCActionFadeTo

CCActionFadeIn是淡入,即由暗转亮,从没有到有;

CCActionFadeOut是淡出,即由亮转暗,从有到没有;

CCActionFadeTo用来修改Node的opacity不透明度  


opacity  255为完全不透明,即完全可见

<span style="font-size:18px;">// 在2秒内,从没有到有
CCActionFadeIn *fadeIn = [CCActionFadeIn actionWithDuration:2];

// 在2s内,从有到没有
CCActionFadeOut *fadeOut = [CCActionFadeOut actionWithDuration:2];

// 在2s内,不透明度变为120,即变为半透明 (不透明度opacity取值范围是0-255)
CCActionFadeTo *fadeTo = [CCActionFadeTo actionWithDuration:2 opacity:120];</span>



6.CCActionRepeat

重复执行某个动作,可以指定重复的次数

<span style="font-size:18px;">// 1秒中顺时针旋转360°
CCActionRotateBy *rotateBy = [CCActionRotateBy actionWithDuration:1 angle:360];
// 重复执行2次旋转动画
CCActionRepeat *repeat = [CCActionRepeat actionWithAction:rotateBy times:2];

[sprite runAction:repeat];</span>

7.CCActionAnimate

按顺序地播放图片,可以实现帧动画。


To be continued...

iOS_31_cocos2d_CCAction