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