cocos2d-x动作包括以下几类:
- 瞬时动作
- 延时动作
- 组合动作
- 速度变化
- 定制扩展动作
1、 瞬时动作
就是不需要时间,马上就完成的动作。瞬时动作的共同基类是 InstantAction。
- CCPlace
- CCHide/ CCShow
- CCToggleVisibility
- CCFlipX
- CCFlipY
CCPlace* place = CCPlace::create(Vec2(visibleSize.width*a, visibleSize.height*a));
if (sprite)
{
sprite->runAction(place);
}
if (int(a * 10) % 2 == 0)
{
CCFlipX* fx = CCFlipX::create(true);
sprite->runAction(fx);
}
else
{
CCFlipY* fy = CCFlipY::create(true);
sprite->runAction(fy);
}
2、 延时动作
延时动作就是指动作的完成需要一定时间。因此actionWithDuration 是延时动作执行时的第一个参数,延时动作的共同基类是 CCIntervalAction(包含了组合动作类)。
Cocos2d提供以下瞬时动作(函数命名规则是:X?To: 意味着运动到指定的位置, X?By:意味着运动到按照指定的 x、y 增量的位置。[x、y 可以是负值])
- CCMoveTo/CCMoveBy 移动(到)
- CCJumpTo/CCJumpBy,跳跃(到), 设置终点位置和跳跃的高度和次数。
- CCBezierTo/CCBezierBy,支持 3 次贝塞尔曲线:P0-起点,P1-起点切线方向,P2-终点切线方向,P3-终点。
- CCScaleTo/CCScaleBy, 设置放大倍数,是浮点型。
- CCRotateTo/CCRotateBy 旋转(到)
- CCBlink 闪烁
- CCTintTo/CCTintBy 色调变化(到)
- CCFadeTo 变暗到
- CCFadeIn 由无变亮
- CCFadeOut 由亮变无
CCMoveTo* mvt = CCMoveTo::create(2.0f, Vec3(a*visibleSize.width, a*visibleSize.height, 0));
if (sprite)
{
sprite->runAction(mvt);
}
3、 组合动作
按照一定的次序将上述基本动作组合起来,形成连贯的一套组合动作。
-
CCSequence
Sequence 的使用非常简单,该类也从 CCIntervalAction 派生,本身就可以被 CocosNode 对象执行。该类的作用就是线序排列若干个动作,然后按先后次序逐个执行。 -
CCSpawn
Spawn 的使用非常简单,该类也从 IntervalAction 派生,本身就可以被CocosNode 对象执行。该类的作用就是同时并列执行若干个动作,但要求动作都必须是可以同时执行的。比如:移动式翻转、变色、变大小等。
需要特别注意的是,同步执行最后的完成时间由基本动作中用时最大者决定。 -
CCRepeat
重复有限次数的动作,该类也从 IntervalAction 派生,可以被 CocosNode 对象执行。 -
Reverse
反动作就是反向(逆向)执行某个动作,支持针对动作序列的反动作序列。反动作不是一个专门的类,而是 CCFiniteAction 引入的一个接口。不是所有的类都支持反动作,XxxxTo 类通常不支持反动作,XxxxBy 类通常支持。 -
CCRepeatForever
从 Action 类直接派生的,因此无法参与序列和同步;自身也无法反向执行。该类的作用就是无限期执行某个动作或动作序列,直到被停止。 -
CCAnimate
让精灵自身连续执行一段影像,形成模拟运动的效果:行走时的精灵状态、打斗时的状态等。
CCFadeIn* fin = CCFadeIn::create(2.5);
CCFadeOut* fout = CCFadeOut::create(3.0);
CCSequence* sq = CCSequence::create(fout, fin, NULL);
sprite->runAction(sq);
4、速度变化
基本动作和组合动作实现了针对精灵的各种运动、动画效果的改变,但这样的改变的速度是不变的,通过 CCEaseAction 为基类的类系和 CCSpped 类我们可以很方便的修改精灵执行劢作的速度:由快至慢还是由慢至快。
- CCEraseIn/Out, CCEraseInOut, 由慢至快/由快至慢
- CCEraseSineIn/Out,CCEraseSineInOut,由慢至快/由快至慢
- CCEraseExponentialIn/Out,CCEraseExponentialInOut由慢至极快/由极快至慢
- CCSpeed(自定义速度) 人工设定速度,还可通过 SetSpeed 不断调整。
auto move = MoveBy::create(3, Vec2(50, 40));
auto move_ease_inout1 = EaseInOut::create(move->clone(), 0.65f);
sprite->runAction(move_ease_inout1);
5、扩展动作
- CCDelayTime 延时动作
- CCCallFunc 在动作序列中间或者结束调用某个函数,执行任何需要执行的任务:动作、状态修改等
- CCCallFuncN 在动作序列中间或者结束调用某个函数,执行任何需要执行的任务:动作、状态修改等
- CCCallFuncND 在动作序列中间或者结束调用某个函数,执行任何需要执行的任务:动作、状态修改等
auto action = Sequence::create(
MoveBy::create(2.0f, Vec2(150, 0)),
CallFuncN::create(CC_CALLBACK_1(HelloWorld::callback, this)),nullptr);
sprite->runAction(action);
void HelloWorld::callback(Node* sender)
{
auto a = JumpBy::create(5, Vec2(0, 0), 100, 5);
sender->runAction(a);
}