九、CCAction
之前介绍CCNode的时候说过,动作是指在特定时间内完成移动、缩放、旋转等操作的行为,节点可以通过运行动作来实现动画效果,这里的动作就是指CCAction对象,它有很多的子类,每个子类都封装了不同的动作效果。
先来看看CCAction的继承结构图

这里我省略了瞬时动作(CCActionInstant)和间隔动作(CCActionInterval)的子类,因为它们又包含了非常多的子类,待会再介绍它们的子类。
CCAction和CCFiniteTimeAction都是抽象类,只定义了一些基本属性和方法,没有实际用途,我们需要使用它们的子类来初始化动作,然后运行到节点上。
由于CCActionInterval的子类太多了,这里就不一一介绍了,可以查阅下API文档
下面列举一下常见的CCActionInterval的子类:
1.CCBlink闪烁效果
不难发现,如果从1.png 到 10.png按顺序显示图片的话会形成一个动画
下面用CCAnimate实现动画效果
这里是将10帧分为10张不同的png图片。为了性能着想,其实最好将10帧打包成一个图片,到时从这张图片上面切割每一帧,这种图片我们可以称为"纹理相册",可以用TexturePacker制作纹理相册
8.CCSequence
一般情况下,如果给节点同时添加几个动作时,它们会同时运行。比如下面的代码效果是一边旋转一边缩放
看完这个图,你可能觉得CCActionInstant好像没有一点使用价值,因为它的好多动作都可以通过修改节点属性来完成。比如可以通过设置节点的visible属性来代替使用CCShow\CCHide\CCToggleVisibility、可以通过修改节点的position属性来代替使用CCPlace。其实当它们与CCSequence结合使用时才有价值。比如,我们想先让节点运行一个CCMoveTo移动到某个位置,移动完毕后再隐藏节点,这时候我们就可以将CCMoveTo、CCHide两个动作按顺序放进CCSequence中达到想要的效果。
// 1秒内顺时针旋转360°CCRotateBy *rotate = [CCRotateBy actionWithDuration:1 angle:360];// 速度变为原来的一半CCSpeed *speed = [CCSpeed actionWithAction:rotate speed:0.5];[sprite runAction:speed];本来1秒就完成旋转的,设置speed为0.5后,就需要2秒才能完成旋转