zoukankan      html  css  js  c++  java
  • 【Cocos2d入门教程五】Cocos2d-x动作篇

    动作类(Action)是所有动作的基类,它创建的一个对象代表一个动作。动作作用于Node,包括继承于之下的Layer、Sprite。因此每个动作 都需要由Node对象或者其继承者执行。动作类(Action)作为基类,实际上是一个接口,动作类的大多数实现类都派生于有限时间动作类 (FiniteTimeAction)。其关系图如下:



    在实际开发中我们通常用到两类动作-即时动作和持续动作,它们均继承于有限时间动作类。

    1. 即时动作

      放置Place

      隐藏 Hide

      显示 Show

      可见切换ToggleVisibility

     

    2.延时动作

      移动到MoveTo

      移动 MoveBy

      跳跃到JumpTo 

      跳跃JumpBy   

      贝塞尔BezierBy  

      放大到ScaleTo   设置放大倍数,是浮点型。

      放大ScaleBy

      旋转到RotateTo

      旋转RotateBy

      闪烁Blink   设定闪烁次数

      色调变化到TintTo

      色调变换TintBy

      变暗到FadeTo

      由无变亮FadeIn

      由亮变无FadeOut

     

    3.组合动作

      序列 Sequence

      同步Spawn

      重复有线次数Repeate

      动作反向Reverse

      动画Animation

      无限重复RepeatForever

     

    4.速度变化

      EaseIn 由慢至快。

      EaseOut 由快至慢

      EaseInOut 由慢至快再由快至慢。

      EaseSineIn 由慢至快。

      EaseSineOut 由快至慢

      EaseSineInOut 由慢至快再由快至慢。

      EaseExponentialIn 由慢至极快。

      EaseExponentialOut 由极快至慢。

      EaseExponentialInOut由慢至极快再由极快至慢。

      Speed 人工设定速度,还可通过SetSpeed不断调整

    下面以几个常用函数作为案例:

      1     Menu * menu =Menu::create();
      2     
      3     menu ->setPosition(Vec2::ZERO);
      4     
      5     addChild(menu);
      6     
      7     //-----------------------------------------------------------------------
      8     //Flip
      9     MenuItemFont * FlipItem =MenuItemFont::create("Filp",CC_CALLBACK_1(NewScene::bgFlip, this));
     10     
     11     FlipItem ->setPosition(60,350);
     12     
     13     menu->addChild(FlipItem);
     14     
     15     
     16     void NewScene::bgFlip(Ref * ref)
     17     {
     18         if (testSp ->isFlippedX())
     19         {
     20             
     21             FlipX * fx = FlipX ::create(false);
     22             
     23             testSp ->runAction(fx);
     24             
     25         }
     26         else
     27         {
     28             
     29             FlipX * fx = FlipX ::create(true);
     30             
     31             testSp ->runAction(fx);
     32         }
     33     }
     34     
     35     
     36     //-----------------------------------------------------------------------
     37     //MoveTo
     38     MenuItemFont * MoveItem =MenuItemFont::create("MoveTo",CC_CALLBACK_1(NewScene::bgMove, this));
     39     
     40     MoveItem ->setPosition(60,300);
     41     
     42     menu->addChild(MoveItem);
     43     
     44     
     45     void NewScene::bgMove(Ref* psend)
     46     {
     47         MoveTo * moveAct = MoveTo::create(0.5,Vec2(400, 400));
     48         
     49         testSp ->runAction(moveAct);
     50     }
     51     
     52     
     53     
     54     //-----------------------------------------------------------------------
     55     //RatateTo
     56     MenuItemFont * RotateItem =MenuItemFont::create("RotateTo",CC_CALLBACK_1(NewScene::bgRotate, this));
     57     
     58     RotateItem ->setPosition(60,250);
     59     
     60     menu->addChild(RotateItem);
     61     
     62     
     63     
     64     void NewScene::bgRotate(Ref * ref)
     65     {
     66         RotateTo * rotate =RotateTo::create(0.5, 100, 100);
     67         
     68         testSp ->runAction(rotate);
     69     }
     70     
     71     
     72     
     73     
     74     //-----------------------------------------------------------------------
     75     //ScaleTo
     76     MenuItemFont * ScaleItem =MenuItemFont::create("ScaleTo",CC_CALLBACK_1(NewScene::bgScale, this));
     77     
     78     ScaleItem ->setPosition(60,200);
     79     
     80     menu->addChild(ScaleItem);
     81     
     82     
     83     void NewScene::bgScale(Ref* psend)
     84     {
     85         ScaleTo * scale =ScaleTo::create(0.5, 2);
     86         
     87         testSp ->runAction(scale);
     88     }
     89     
     90     
     91     
     92     //-----------------------------------------------------------------------
     93     //Hide Show
     94     MenuItemToggle * toggleMenu =MenuItemToggle::createWithCallback(
     95                                                                     CC_CALLBACK_1(NewScene::bgToggle,this),
     96                                                                     MenuItemFont::create("Show"),
     97                                                                     MenuItemFont::create("Hide"),
     98                                                                     NULL);
     99     
    100     toggleMenu ->setPosition(60,150);
    101     
    102     menu ->addChild(toggleMenu);
    103     
    104     
    105     void NewScene::bgToggle(Ref * ref)
    106     {
    107         if(testSp->isVisible())
    108         {
    109             Hide * hide =Hide::create();
    110             testSp ->runAction(hide);
    111             ShowTag =0;
    112         }
    113         else
    114         {
    115             Show * show =Show ::create();
    116             testSp ->runAction(show);
    117             ShowTag =1;
    118         }
    119         
    120     }
    121     
    122     
    123     
    124     //-----------------------------------------------------------------------
    125     //FadeIn FadeOut
    126     MenuItemToggle * FadeToggle =MenuItemToggle::createWithCallback(
    127                                                                     CC_CALLBACK_1(NewScene::FadeToggle,this),
    128                                                                     MenuItemFont::create("FadeIN"),
    129                                                                     MenuItemFont::create("FadeOut"),
    130                                                                     NULL);
    131     
    132     FadeToggle ->setPosition(60,100);
    133     
    134     menu ->addChild(FadeToggle);
    135     
    136     
    137     void NewScene::FadeToggle(Ref * ref)
    138     {
    139         if(FadeTag == 1)
    140         {
    141             FadeOut *  FadeOut = FadeOut ::create(1);
    142             
    143             testSp ->runAction(FadeOut);
    144             
    145             FadeTag = 0;
    146         }
    147         else if (FadeTag == 0)
    148         {
    149             FadeIn * FadeIn = FadeIn ::create(1);
    150             
    151             testSp ->runAction(FadeIn);
    152             
    153             FadeTag = 1 ;
    154         }
    155         
    156     }
    157     
    158     
    159     //-----------------------------------------------------------------------
    160     //曲线运动
    161     MenuItemFont * Cardin =MenuItemFont::create("Cardin",CC_CALLBACK_1(NewScene::CardIn, this));
    162     
    163     Cardin ->setPosition(60,50);
    164     
    165     menu->addChild(Cardin);
    166     
    167     
    168     void NewScene::CardIn(Ref * ref)
    169     {
    170         PointArray  * array = PointArray ::create(20);
    171         
    172         array ->addControlPoint(Point(100,100));
    173         
    174         array ->addControlPoint(Point(200,400));
    175         
    176         array ->addControlPoint(Point(300,500));
    177         
    178         CardinalSplineTo * CardIn = CardinalSplineTo::create(1, array, 5);
    179         
    180         testSp ->runAction(CardIn);
    181     }

    注意:这里需要注意To跟By的不同,To的话在坐标系中是以绝对位置,By的话在坐标系中是以node对象的相对位置进行执行动作。

    如果你想搭配reverse()一起用的话用To是无效的,必须用By.


    Ok.关于Cocos2d-x的动作就分享至此。不对的地方还望指出互相探讨学习

     
  • 相关阅读:
    更换Ubuntu源为国内源的操作记录
    Dockerfile构建容器镜像
    Nginx负载均衡中后端节点服务器健康检查
    Linux系统下CPU使用(load average)梳理
    android:怎么实现一个控件与另一个指定控件左对齐
    Android Studio一直 Fetching Documentation...
    px、pt、ppi、dpi、dp、sp之间的关系
    Android中如何在代码中设置View的宽和高?
    硬中断与软中断的区别!
    Java 日期时间获取和显示
  • 原文地址:https://www.cnblogs.com/advances/p/4722253.html
Copyright © 2011-2022 走看看