游戏开发cocos2d-x实战(9) -- 动作行为(动画)

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);
}

6、实战代码

下载代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值