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

转载于:https://www.cnblogs.com/huojing/articles/10174039.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值