【Cocos2d入门教程五】Cocos2d-x动做篇

动做类(Action)是全部动做的基类,它建立的一个对象表明一个动做。动做做用于Node,包括继承于之下的Layer、Sprite。所以每一个动做 都须要由Node对象或者其继承者执行。动做类(Action)做为基类,其实是一个接口,动做类的大多数实现类都派生于有限时间动做类 (FiniteTimeAction)。其关系图以下:node



在实际开发中咱们一般用到两类动做-即时动做和持续动做,它们均继承于有限时间动做类。ide

1. 即时动做函数

  放置Place学习

  隐藏 Hide动画

  显示 Showthis

  可见切换ToggleVisibilityspa

 

2.延时动做code

  移动到MoveTo对象

  移动 MoveByblog

  跳跃到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的动做就分享至此。不对的地方还望指出互相探讨学习

相关文章
相关标签/搜索