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