【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的動做就分享至此。不對的地方還望指出互相探討學習

相關文章
相關標籤/搜索