基本概念:
CCAction是动作类的基类,所有动作都派生自这个类,它创建一个对象代表了一个动作,动作作用于CCNode。
值得注意的是:一个CCAction只能使用一次,这是因为动作对象不仅描述了动作,还保存了这个动作持续过程中不断改变的一些中间参数。对于需要反复使用的动作对象,可以通过copy方法复制使用。
CCAction作为一个基类,其实质是一个接口,即抽象类,由它派生的实现类才是我们实际使用的动作。CCAction的绝大多数实现类都派生自CCFiniteTimeAction,这个类定义了在有限时间内可以完成的动作。CCFiniteTimeAction定义了reverse方法,通过这个方法可以获得一个与原动作相反的动作(逆动作),比如隐藏一个精灵,用逆动作显示出来,并不是所有的动作都有对应的逆动作。
由CCFiniteTimeAction派生出的两个主要类分别为瞬时动作CCActionInstant和持续性动作CCActionInterval。
瞬时动作:
瞬时动作是指能立刻完成的动作,是CCFiniteTimeAction中动作持续时间为0的特例。更准确的说,这类动作是在下一帧会立刻执行并完成的动作。
持续性动作:
每一种持续性动作通常存在两个不同的变种动作,分别具有To和By后缀:后缀为To的动作描述了节点属性值的绝对变化,例如CCMoveTo将对象移动到一个特定的位置;而后缀为By的动作则描述了属性值相对的变化,如CCMoveBy将对象移动一段相对位移。
根据作用效果不同,分为以下几种:
位置变化动作
属性变化动作
视觉特效动作
控制动作
复合动作:
重复(CCRepeat/CCRepeatForever)
并列(CCSpawn)
指的是使一批动作同时执行,例如,鱼一边沿曲线游动一边摇尾巴
序列(CCSequence)
提供了一个动作队列,它会顺序执行一系列动作。
延时(CCDelayTime)
CCDelayTime是一个什么都不做的动作,用来表示动作序列里一段空白期,通过站位的方法将不同的动作段串在一起。
变速动作:
CCSpeed动作
用于线性地改变某个动作的速度,因此可以实现成倍地快放或慢放功能。
注意:要先创建一个动作,然后将目标动作包装到CCSpeed动作中;
例如:
1 CCRepeatForever* repeat = CCRepeatForever::create(animation); 2 CCSpeed* speed = CCSpeed::create(repeat, 1.0f); 3 speed->setTag(action_speed_tag); 4 fish->runAction(speed);
CCActionEase动作
分为以下五类动作,每一类动作都有3个不同时期的变换:In 、Out、InOut。
图像中,横坐标表示实际动画时间,纵坐标表示变换后的动画时间。因此,线性动作的图像应该是一条自左下角到右上角的直线。