Test系列:action

1.基本动作
     Cocos2d提供的基本动作:瞬时动作、延时动作、运作速度。
     瞬时动作:就是不需要时间,马上就完成的动作。瞬时动作的共同基类是 InstantAction。
     Cocos2d提供以下瞬时动作:

  • 放置 – Place

    flight->runAction(CCPlace::actionWithPosition(p));

  • 隐藏 – Hide

    flight->runAction(CCHide::action());

  • 显示 – Show

    flight->runAction(CCShow::action());

  • 可见切换 – ToggleVisibility

    flight->runAction(CCToggleVisibility::action());

  • 水平翻转/垂直翻转

    flight->runAction(CCFlipX::actionWithFlipX(true));
    flight->runAction(CCFlipY::actionWithFlipY(true));

  • 网格

    网格重用 - CCReuseGrid|停止网格 - CCStopGrid


2.延时动作
    延时动作就是指动作的完成需要一定时间。因此actionWithDuration 是延时动作执行时的第一个参数,延时动作的共同基类是 CCIntervalAction(包含了组合动作类)。
    Cocos2d提供以下瞬时动作(函数命名规则是:XxxxTo: 意味着运动到指定的位置, XxxxBy:意味着运动到按照指定的 x、y 增量的位置。[x、y 可以是负值]):

  • 移动到 – CCMoveTo

    CCActionInterval *action = CCMoveTo::actionWithDuration(ccTime duration, CCPosition& position);

    sprite->runAction(action);

  • 移动– CCMoveBy
  • 跳跃到 – CCJumpTo   设置终点位置和跳跃的高度和次数。
  • 跳跃 – CCJumpBy   设置终点位置和跳跃的高度和次数。
  • 贝塞尔 – CCBezierBy  支持 3 次贝塞尔曲线:P0-起点,P1-起点切线方向,P2-终点切线方向,P3-终点。
  • 放大到 – CCScaleTo   设置放大倍数,是浮点型。
  • 放大 – CCScaleBy
  • 旋转到 – CCRotateTo
  • 旋转 – CCRotateBy
  • 闪烁 – CCBlink   设定闪烁次数
  • 色调变化到 – CCTintTo
  • 色调变换 – CCTintBy
  • 变暗到 – CCFadeTo
  • 由无变亮 – CCFadeIn
  • 由亮变无 – CCFadeOut


3.组合动作
   按照一定的次序将上述基本动作组合起来,形成连贯的一套组合动作。组合动作包括以下几类:

  • 序列 – CCSequence

    Sequence 的使用非常简单,该类也从 CCIntervalAction 派生,本身就可以被 CocosNode 对象执行。该类的作用就是线序排列若干个动作,然后按先后次序逐个执行。

    flight->runAction(CCSequence::actions(action0, action1, action2, NULL));

  • 同步 – Spawn

    Spawn 的使用非常简单,该类也从 IntervalAction 派生,本身就可以被CocosNode 对象执行。该类的作用就是同时并列执行若干个动作,但要求动作都必须是可以同时执行的。比如:移动式翻转、变色、变大小等。
    需要特别注意的是,同步执行最后的完成时间由基本动作中用时最大者决定。

    flight->runAction(CCSpawn::actions(action1, action2, sequence, NULL));

  • 重复有线次数 – Repeate

    重复有限次数的动作,该类也从 IntervalAction 派生,可以被 CocosNode 对象执行。

    CCFiniteTimeAction *sequence = CCSequence::actions(action1, action2, NULL);
    // 重复运行上述动作序列3次
    flight->runAction(CCRepeat::actionWithAction(sequence, 3));

  • 反动作 – Reverse

     反动作就是反向(逆向)执行某个动作,支持针对动作序列的反动作序列。反动作不是一个专门的类,而是 CCFiniteAction 引入的一个接口。不是所有的类都支持反动作,XxxxTo 类通常不支持反动作,XxxxBy 类通常支持。CCFiniteTimeAction *action2 = action1->reverse();

  • 动画 – Animation

    动画就是让精灵自身连续执行一段影像,形成模拟运动的效果:行走时的精灵状态、打斗时的状态等。

  • 无限重复 – RepeatForever

    RepeatForever 是从 Action 类直接派生的,因此无法参与序列和同步;自身也无法反向执行。该类的作用就是无限期执行某个动作或动作序列,直到被停止。
    CCAction* action = sprite->runAction(CCRepeatForever::actionWithDuration(CCSequence::actions(action1, action2, NULL));

这个时候可以得到一个action,然后给这个动作设置tag:

    action->setTag(1);

    当我们想把这个无限重复停止的时候,就可以里利用这个tag将动作删除:

    sprite->stopActionByTag(1);

4.速度变化
    基本动作和组合动作实现了针对精灵的各种运动、动画效果的改变,但这样的改变的速度是不变的,通过 CCEaseAction 为基类的类系和 CCSpped 类我们可以很方便的修改精灵执行劢作的速度:由快至慢还是由慢至快。

  • EaseIn 由慢至快。
  • EaseOut 由快至慢
  • EaseInOut 由慢至快再由快至慢。
  • EaseSineIn由慢至快。
  • EaseSineOut 由快至慢
  • EaseSineInOut 由慢至快再由快至慢。
  • EaseExponentialIn 由慢至极快。
  • EaseExponentialOut 由极快至慢。
  • EaseExponentialInOut 由慢至极快再由极快至慢。
  • EaseElasticIn 橡皮筋式的速度变化
  • EaseElasticOut
  • EaseElasticInOut
  • EaseBounceIn 弹跳,弹起的意思
  • EaseBounceOut
  • EaseBounceInOut
  • EaseBackIn
  • EaseBackOut
  • EaseBackInOut
  • Speed 人工设定速度,还可通过 SetSpeed 不断调整。

5.扩展动作

  • 延时动作 – Delay ,比如在动作序列中增加一个时间间歇

    flight->runAction(CCSequence::actions(action1, CCDelayTime::actionWithDuration(1.0f), action2, NULL));

  • 函数

    在动作序列中间或者末尾调用某个函数,执行任何任务:动作、状态修改等。在cocos2d-x中,调用函数的动作一共有4种。

    1.CCCallFunc 仅函数调用,无任何参数。

1 void ExtendActionLayer::onCallBack1()
2 {
3     flight->runAction(CCTintBy::actionWithDuration(0.5f2550,255));
4 }
5
6 void ExtendActionLayer::onCallFunc(CCObject* pSender)
7 {
8     CCFiniteTimeAction *action1 = CCMoveBy::actionWithDuration(2.0f, ccp(200200));
9     CCFiniteTimeAction *action2 = action1->reverse();
10     CCFiniteTimeAction *actionF = CCCallFunc::actionWithTarget(this, callfunc_selector(ExtendActionLayer::onCallBack1));
11     flight->runAction(CCSequence::actions(action1, actionF, action2, NULL));
12
 }

2.CCCallFuncN

调用函数,并将当前对象的指针(CCNode指针)作为第一个参数传递进去。

1 void ExtendActionLayer::onCallBack2(CCNode* pSender)
2 {
3 // 在这个例子里,pSender就是flight,因为是他执行了那个actionF
4 pSender->runAction(CCTintBy::actionWithDuration(1.0f2550255));
5 }
6 
7 void ExtendActionLayer::onCallFuncN(CCObject* pSender)
8 {
9 CCFiniteTimeAction *action1 = CCMoveBy::actionWithDuration(2.0f, ccp(200200));
10 CCFiniteTimeAction *action2 = action1->reverse();
11 CCFiniteTimeAction *actionF = CCCallFuncN::actionWithTarget(this, callfuncN_selector(ExtendActionLayer::onCallBack2));
12 flight->runAction(CCSequence::actions(action1, actionF, action2, NULL));
13 }
3.CCCallFuncND

在前一种方式的基础上增加一个数据参数,这是void指针类型。

1 void ExtendActionLayer::onCallBack3(CCNode* pSender, void* pData)
2 {
3 pSender->runAction(CCTintBy::actionWithDuration(static_cast<float>((int)pData), 255,0255));
4 }
5 
6 void ExtendActionLayer::onCallFuncND(CCObject* pSender)
7 {
8 CCFiniteTimeAction *action1 = CCMoveBy::actionWithDuration(2.0f, ccp(200200));
9 CCFiniteTimeAction *action2 = action1->reverse();
10 // 这里直接将整数常量强转成(void *)类型似乎有欠妥当,但对这些Action的生命周期不太清楚,稍后深入一下。
11 CCFiniteTimeAction *actionF = CCCallFuncND::actionWithTarget(this, callfuncND_selector(ExtendActionLayer::onCallBack3), (void *)2);
12 flight->runAction(CCSequence::actions(action1, actionF, action2, NULL));
13 }
4.CCCallFuncO

调用函数,并传递一个CCObject指针作为参数。这个似乎不太常用,资料比较少,以后再深入。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值