Cocos2D-Android- 动作的处理

Cocos2D-Android- 动作的处理

基础

在cocos2d引擎中有一个动作类,CCAction是动作类的基类,动作是定义在节点(CCNode)上的,以节点为
目标。

基本动作

Cocos2d提供的基本动作:瞬时动作、延时动作、运作速度。

  • 瞬时动作

就是不需要时间,马上就完成的动作。瞬时动作的共同基类是 InstantAction。Cocos2d提供以下瞬时动作:

  • 放置 – Place
  • 隐藏 – Hide
  • 显示 – Show
    CCHide ccHide=CCHide.action();// 隐藏
  • 延时动作

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

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

代码示例

    CCSprite sprite = getSprite();
    //CCMoveTo与CCMoveBy
    // 参数1  移动的时间 单位秒  参数2  移动的目的地
    CCMoveTo ccMoveTo=CCMoveTo.action(2, CCNode.ccp(200, 0));
    // 参数1  移动的时间 单位秒  参数2  坐标的改变  
    CCMoveBy ccMoveBy=CCMoveBy.action(2, CCNode.ccp(200, 0)); 
    sprite.runAction(ccMoveTo);

    //CCRotateTo与CCRotateBy
    CCRotateTo rotateTo=CCRotateTo.action(3, 240);  //偷懒: 即会逆时针旋转60度,到达目的地
    CCRotateBy by=CCRotateBy.action(3, 240);      //不偷懒,就是顺时针旋转240度

    //CCJumpBy
    // 1 时间  单位秒 2 目的地   3 高出的高度  4 跳跃的次数
    CCJumpBy ccJumpBy=CCJumpBy.action(4, ccp(200, 100), 100, 2);

    //CCBezierBy
    CCBezierConfig c=new CCBezierConfig();
    c.controlPoint_1=ccp(0, 0);
    c.controlPoint_2=ccp(100, 100);
    c.endPosition=ccp(200, 0);
    CCBezierBy bezierBy=CCBezierBy.action(2, c);

    //延时1秒的动作
    CCDelayTime delayTime=CCDelayTime.action(1);//停留一秒钟
  • 组合动作

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

  • 序列 – CCSequence
    • Sequence 的使用非常简单,该类也从 CCIntervalAction 派生,本身就可以被 CocosNode 对象执行。该类的作用就是线序排列若干个动作,然后按先后次序逐个执行。
  • 同步 – Spawn
    • Spawn 的使用非常简单,该类也从 IntervalAction 派生,本身就可以被CocosNode 对象执行。该类的作用就是同时并列执行若干个动作,但要求动作都必须是可以同时执行的。
      比如:移动式翻转、变色、变大小等。需要特别注意的是,同步执行最后的完成时间由基本动作中用时最大者决定。
  • 重复有线次数 – Repeate
    • 重复有限次数的动作,该类也从 IntervalAction 派生,可以被 CocosNode 对象执行。
  • 反动作 – Reverse
    • 反动作就是反向(逆向)执行某个动作,支持针对动作序列的反动作序列。反动作不是一个专门的类,而是 CCFiniteAction 引入的一个接口。不是所有的类都支持反动作,
      XxxxTo 类通常不支持反动作,XxxxBy 类通常支持。
  • 动画 – Animation
    • 动画就是让精灵自身连续执行一段影像,形成模拟运动的效果:行走时的精灵状态、打斗时的状态等。
  • 无限重复 – RepeatForever
    • RepeatForever 是从 Action 类直接派生的,因此无法参与序列和同步;自身也无法反向执行。该类的作用就是无限期执行某个动作或动作序列,直到被停止。
    //CCSequence, Reverse,RepeatForever
    CCSprite sprite = getSprite();
    sprite.setPosition(0, 100);
    CCMoveBy ccMoveBy=CCMoveBy.action(2, CCNode.ccp(200, 0));
    CCMoveBy reverse = ccMoveBy.reverse();  //获取相反的动作
    CCSequence sequence=CCSequence.actions(ccMoveBy, reverse);//CCSequence 串行动作  
    //CCRepeatForever forever=CCRepeatForever.action(sequence);   //让串行动作永不停止循环了
    sprite.runAction(sequence);

    //Animation与序列帧的播放
    //创建要运行的序列帧
    ArrayList<CCSpriteFrame> frames = new ArrayList<CCSpriteFrame>();
    String format = "z_1_%02d.png";// 02d 占位符 可以表示两位的整数 如果不足两位前面用0补足
    for (int i = 1; i <= 7; i++) {
        CCSpriteFrame displayedFrame = CCSprite.sprite(
                String.format(format, i)).displayedFrame();
        frames.add(displayedFrame);
    }

    // 配置序列帧的信息 参数1 动作的名字(给程序员看的) 参数2 每一帧播放的时间 单位秒 参数3 所有用到的帧
    CCAnimation anim = CCAnimation.animation("走路", 0.2f, frames);
    CCAnimate animate = CCAnimate.action(anim);     // 序列帧动作默认是永不停止的循环
    //CCAnimate animate = CCAnimate.action(anim, false);  //不是永不停止的循环
    CCRepeatForever forever = CCRepeatForever.action(animate);    
    sprite.runAction(forever);
  • 速度变化

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

  • EaseIn 由慢至快。
  • EaseOut 由快至慢
  • EaseInOut 由慢至快再由快至慢。
  • EaseSineIn由慢至快。
  • EaseSineOut 由快至慢
  • EaseSineInOut 由慢至快再由快至慢。
  • EaseExponentialIn 由慢至极快。
  • EaseExponentialOut 由极快至慢。
  • EaseExponentialInOut 由慢至极快再由极快至慢。
  • Speed 人工设定速度,还可通过 SetSpeed 不断调整。
//CCEaseIn(加速)  CCEaseOut(减速)
    CCMoveTo ccMoveTo=CCMoveTo.action(10, CCNode.ccp(200, 0));
    CCEaseIn easeIn=CCEaseIn.action(ccMoveTo,9);   //让移动按照有一定加速度去移动
    getSprite().runAction(easeIn);
  • 扩展动作(很有用)

延时动作 – Delay ,比如在动作序列中增加一个时间间歇函数调用,
函数在动作序列中间或者结束调用某个函数,执行任何需要执行的任务:动作、状态修改等。

    //当action动作执行完毕后,调用本类的“loadWelcome”函数
    CCSequence ccSequence=CCSequence.actions(action,CCCallFunc.action(this, "loadWelcome"));  
  • loadWelcome函数的要求
    • 不可以是私有的
    • 应带有Object类型的参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值