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的子类:
闪烁效果
<span style="font-size:18px;">// 5秒内闪烁20次 CCActionBlink *blink = [CCActionBlink actionWithDuration:5 blinks:20]; [sprite runAction:blink];</span>
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>
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>
<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>
CCActionScaleBy是在当前缩放比例的基础上再缩放一定的比例,
CCActionScaleTo是从当前缩放比例缩放到指定的比例 (相对于原始大小)
假设精灵在初始化的时候的缩放比例为0.8
<span style="font-size:18px;">sprite.scale = 0.8;</span>
<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>
<span style="font-size:18px;">CCActionScaleTo *scaleTo = [CCActionScaleTo actionWithDuration:1 scale:0.5]; [sprite runAction:scaleTo]; // 在1秒内,宽度和高度缩小为0.5倍,那么sprite最终缩放比例是就0.5</span>
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>
重复执行某个动作,可以指定重复的次数
<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>
按顺序地播放图片,可以实现帧动画。
To be continued...
原文地址:http://blog.csdn.net/pre_eminent/article/details/39106479