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

 

 

本文链接:【Cocos2d入门教程五】Cocos2d-x动作篇,转载请注明。



You must enable javascript to see captcha here!

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress

无觅相关文章插件,快速提升流量