《Cocos2d-x-3.2 Lua-tests》文件详解 之 特效Effects

特效也是Action,只不过比普通的Action要炫一点,别无其他。

  1 require "src/EffectsTest/EffectsName"
  2 
  3 --[[
  4     EffectsList =
  5     {
  6         [0] = "Shaky3D",      --3D晃动效果
  7         "Waves3D",            --3D波浪效果
  8         "FlipX3D",            --3D翻转X轴的效果,从上往下看,逆时针
  9         "FlipY3D",            --3D翻转Y轴的效果,从左往右看,逆时针
 10         "Lens3D",             --3D球面效果,外凸
 11         "Ripple3D",           --3D涟漪效果,从中间想四周扩散
 12         "Liquid",             --3D液体效果,就像把水面当镜子用那样
 13         "Waves",              --2D波浪效果
 14         "Twirl",              --2D(局部)扭曲效果
 15         "ShakyTiles3D",       --3D瓦片震动效果
 16         "ShatteredTiles3D",   --3D随机碎片效果
 17         "ShuffleTiles",       --(平面)洗牌效果
 18         "FadeOutTRTiles",     --瓦片退出效果,左下到右上
 19         "FadeOutBLTiles",     --瓦片退出效果,右上到左下
 20         "FadeOutUpTiles",     --瓦片退出效果,从下到上
 21         "FadeOutDownTiles",   --瓦片推出效果,从上到下
 22         "TurnOffTiles",       --瓦片随机淡出效果
 23         "WavesTiles3D",       --3D瓦片波浪效果
 24         "JumpTiles3D",        --3D瓦片,一上一下相互跳动效果
 25         "SplitRows",          --2D分裂横向抽出
 26         "SplitCols",          --2D分裂纵向抽出
 27         "PageTurn3D",         --3D翻页特效
 28     }
 29 --]]
 30 
 31 local ActionIdx = -1  --动作标签
 32 local size = cc.Director:getInstance():getWinSize()  --窗口尺寸
 33 --标签
 34 local kTagTextLayer  = 1
 35 local kTagBackground = 1
 36 local kTagLabel      = 2
 37 local MAX_LAYER      = 22
 38 
 39 local testLayer  = nil
 40 local titleLabel = nil
 41 local entry      = nil
 42 local gridNodeTarget = nil
 43 
 44 local function checkAnim(dt)
 45     if nil == gridNodeTarget then
 46         return
 47     end
 48     if gridNodeTarget:getNumberOfRunningActions() == 0 and nil ~=gridNodeTarget:getGrid() then
 49         gridNodeTarget:setGrid(nil)
 50     end
 51 end
 52 
 53 local function onEnterOrExit(tag)
 54     local scheduler = cc.Director:getInstance():getScheduler()
 55     if tag == "enter" then
 56         entry = scheduler:scheduleScriptFunc(checkAnim, 0, false)
 57     elseif tag == "exit" then
 58         scheduler:unscheduleScriptEntry(entry)
 59     end
 60 end
 61 
 62 --菜单层布局
 63 --以下代码实现通过菜单控制,依次观看各种不同的效果
 64 local function backAction()
 65     ActionIdx = ActionIdx - 1
 66     if ActionIdx < 0 then
 67         ActionIdx = ActionIdx + MAX_LAYER
 68     end
 69     return CreateEffectsTestLayer()
 70 end
 71 
 72 local function restartAction()
 73     return CreateEffectsTestLayer()
 74 end
 75 
 76 local function nextAction()
 77     ActionIdx = ActionIdx + 1
 78     ActionIdx = math.mod(ActionIdx, MAX_LAYER)
 79     return CreateEffectsTestLayer()
 80 end
 81 
 82 local function backCallback(sender)
 83     local scene = cc.Scene:create()
 84     scene:addChild(backAction())
 85     scene:addChild(CreateBackMenuItem())
 86     cc.Director:getInstance():replaceScene(scene)
 87 end
 88 
 89 local function restartCallback(sender)
 90     local scene = cc.Scene:create()
 91     scene:addChild(restartAction())
 92     scene:addChild(CreateBackMenuItem())
 93     cc.Director:getInstance():replaceScene(scene)
 94 end
 95 
 96 local function nextCallback(sender)
 97     local scene = cc.Scene:create()
 98     scene:addChild(nextAction())
 99     scene:addChild(CreateBackMenuItem())
100     cc.Director:getInstance():replaceScene(scene)
101 end
102 --------------------------------------
103 --  Shaky3DDemo
104 --------------------------------------
105 local function Shaky3DDemo(t)
106     --参数:时间,size代表的是x,y方向震动的频率,震动幅度 - 后面的bool参数还不知道神马作用。
107     return cc.Shaky3D:create(t, cc.size(100,100), 2, true)
108 end
109 
110 --------------------------------------
111 --  Waves3DDemo
112 --------------------------------------
113 local function Waves3DDemo(t)
114     --参数:时间,size越大越平滑,速度,幅度
115     return cc.Waves3D:create(t, cc.size(100,100), 10, 10)
116 end
117 
118 --------------------------------------
119 --  FlipX3DDemo
120 --------------------------------------
121 local function FlipX3DDemo(t)
122     --一个参数:时间
123     local flipx  = cc.FlipX3D:create(t)
124     local flipx_back = flipx:reverse()
125     local delay = cc.DelayTime:create(2)
126 
127     return cc.Sequence:create(flipx, flipx_back, delay)
128 end
129 
130 --------------------------------------
131 --  FlipY3DDemo
132 --------------------------------------
133 local function FlipY3DDemo(t)
134     --同上
135     local flipy  = cc.FlipY3D:create(t)
136     local flipy_back = flipy:reverse()
137     local delay = cc.DelayTime:create(2)
138 
139     return cc.Sequence:create(flipy, flipy_back, delay)
140 end
141 
142 --------------------------------------
143 --  Lens3DDemo
144 --------------------------------------
145 local function Lens3DDemo(t)
146     --参数:时间,,球心位置,鼓出的球的半径
147     --return cc.Lens3D:create(t, cc.size(15,10), cc.p(size.width/2,size.height/2), 240)
148     return cc.Lens3D:create(t, cc.size(10,60), cc.p(size.width/2,size.height/2), 100)
149     
150 end
151 
152 --------------------------------------
153 --  Ripple3DDemo
154 --------------------------------------
155 local function Ripple3DDemo(t)
156     --参数:时间,精度,中心位置,范围,速度,幅度
157     return cc.Ripple3D:create(t, cc.size(32,24), cc.p(size.width/2,size.height/2), 140, 20, 100)
158 end
159 
160 --------------------------------------
161 --  LiquidDemo
162 --------------------------------------
163 local function LiquidDemo(t)
164     return cc.Liquid:create(t, cc.size(16,12), 4, 20)
165 end
166 
167 --------------------------------------
168 --  WavesDemo
169 --------------------------------------
170 local function WavesDemo(t)
171     return cc.Waves:create(t, cc.size(16,12), 4, 20, true, true)
172 end
173 
174 --------------------------------------
175 --  TwirlDemo
176 --------------------------------------
177 local function TwirlDemo(t)
178     return cc.Twirl:create(t, cc.size(12,8), cc.p(size.width/2, size.height/2), 1, 2.5)
179 end
180 
181 --------------------------------------
182 --  ShakyTiles3DDemo
183 --------------------------------------
184 local function ShakyTiles3DDemo(t)
185     return cc.ShakyTiles3D:create(t, cc.size(16,12), 5, false)
186 end
187 
188 --------------------------------------
189 --  ShatteredTiles3DDemo
190 --------------------------------------
191 local function ShatteredTiles3DDemo(t)
192     return cc.ShatteredTiles3D:create(t, cc.size(16,12), 5, false)
193 end
194 
195 --------------------------------------
196 --  ShuffleTilesDemo
197 --------------------------------------
198 local function ShuffleTilesDemo(t)
199     local shuffle = cc.ShuffleTiles:create(t, cc.size(16,12), 25)
200     local shuffle_back = shuffle:reverse()
201     local delay = cc.DelayTime:create(2)
202 
203     return cc.Sequence:create(shuffle, shuffle_back, delay)
204 end
205 
206 --------------------------------------
207 --  FadeOutTRTilesDemo
208 --------------------------------------
209 local function FadeOutTRTilesDemo(t)
210     local fadeout = cc.FadeOutTRTiles:create(t, cc.size(16,12))
211     local back = fadeout:reverse()
212     local delay = cc.DelayTime:create(0.5)
213 
214     return cc.Sequence:create(fadeout, back, delay)
215 end
216 
217 --------------------------------------
218 --  FadeOutBLTilesDemo
219 --------------------------------------
220 local function FadeOutBLTilesDemo(t)
221     local fadeout = cc.FadeOutBLTiles:create(t, cc.size(16,12))
222     local back = fadeout:reverse()
223     local delay = cc.DelayTime:create(0.5)
224 
225     return cc.Sequence:create(fadeout, back, delay)
226 end
227 
228 --------------------------------------
229 --  FadeOutUpTilesDemo
230 --------------------------------------
231 local function FadeOutUpTilesDemo(t)
232     local fadeout = cc.FadeOutUpTiles:create(t, cc.size(16,12))
233     local back = fadeout:reverse()
234     local delay = cc.DelayTime:create(0.5)
235 
236     return cc.Sequence:create(fadeout, back, delay)
237 end
238 
239 --------------------------------------
240 --  FadeOutDownTilesDemo
241 --------------------------------------
242 local function FadeOutDownTilesDemo(t)
243     local fadeout = cc.FadeOutDownTiles:create(t, cc.size(16,12))
244     local back = fadeout:reverse()
245     local delay = cc.DelayTime:create(0.5)
246 
247     return cc.Sequence:create(fadeout, back, delay)
248 end
249 
250 --------------------------------------
251 --  TurnOffTilesDemo
252 --------------------------------------
253 local function TurnOffTilesDemo(t)
254     local fadeout = cc.TurnOffTiles:create(t, cc.size(48,32), 25)
255     local back = fadeout:reverse()
256     local delay = cc.DelayTime:create(0.5)
257 
258     return cc.Sequence:create(fadeout, back, delay)
259 end
260 
261 --------------------------------------
262 --  WavesTiles3DDemo
263 --------------------------------------
264 local function WavesTiles3DDemo(t)
265     return cc.WavesTiles3D:create(t, cc.size(15,10), 4, 120)
266 end
267 
268 --------------------------------------
269 --  JumpTiles3DDemo
270 --------------------------------------
271 local function JumpTiles3DDemo(t)
272     return cc.JumpTiles3D:create(t, cc.size(15,10), 2, 30)
273 end
274 
275 --------------------------------------
276 --  SplitRowsDemo
277 --------------------------------------
278 local function SplitRowsDemo(t)
279     --参数:时间,分割线数量
280     return cc.SplitRows:create(t, 18)
281 end
282 
283 --------------------------------------
284 --  SplitColsDemo
285 --------------------------------------
286 local function SplitColsDemo(t)
287     --参数:时间,分割线数量
288     return cc.SplitCols:create(t, 10)
289 end
290 
291 --------------------------------------
292 --  PageTurn3DDemo
293 --------------------------------------
294 local function PageTurn3DDemo(t)
295     cc.Director:getInstance():setDepthTest(true)
296     --测试结果显示:cc.size()越大,页面越光滑
297     return cc.PageTurn3D:create(t, cc.size(50,50))
298 end
299 
300 --------------------------------------
301 --  Effects Test
302 --------------------------------------
303 local function createEffect(idx, t)
304     cc.Director:getInstance():setDepthTest(false)
305     local action = nil
306 
307     if idx == 0 then
308         action = Shaky3DDemo(t)
309     elseif idx == 1 then
310         action = Waves3DDemo(t)
311     elseif idx == 2 then
312         action = FlipX3DDemo(t)
313     elseif idx == 3 then
314         action = FlipY3DDemo(t)
315     elseif idx == 4 then
316         action = Lens3DDemo(t)
317     elseif idx == 5 then
318         action = Ripple3DDemo(t)
319     elseif idx == 6 then
320         action = LiquidDemo(t)
321     elseif idx == 7 then
322         action = WavesDemo(t)
323     elseif idx == 8 then
324         action = TwirlDemo(t)
325     elseif idx == 9 then
326         action = ShakyTiles3DDemo(t)
327     elseif idx == 10 then
328         action = ShatteredTiles3DDemo(t)
329     elseif idx == 11 then
330         action = ShuffleTilesDemo(t)
331     elseif idx == 12 then
332         action = FadeOutTRTilesDemo(t)
333     elseif idx == 13 then
334         action = FadeOutBLTilesDemo(t)
335     elseif idx == 14 then
336         action = FadeOutUpTilesDemo(t)
337     elseif idx == 15 then
338         action = FadeOutDownTilesDemo(t)
339     elseif idx == 16 then
340         action = TurnOffTilesDemo(t)
341     elseif idx == 17 then
342         action = WavesTiles3DDemo(t)
343     elseif idx == 18 then
344         action = JumpTiles3DDemo(t)
345     elseif idx == 19 then
346         action = SplitRowsDemo(t)
347     elseif idx == 20 then
348         action = SplitColsDemo(t)
349     elseif idx == 21 then
350         action = PageTurn3DDemo(t)
351     end
352 
353     return action
354 end
355 
356 function CreateEffectsTestLayer()
357     testLayer = cc.LayerColor:create(cc.c4b(32,128,32,255))
358 
359     --网格节点
360     gridNodeTarget = cc.NodeGrid:create()
361     --创建效果Action
362     local effect = createEffect(ActionIdx, 5)
363     --runAction播放效果
364     gridNodeTarget:runAction(effect)
365     
366     testLayer:addChild(gridNodeTarget, 0, kTagBackground)
367     
368     
369     --向网格节点上加几个精灵
370     local bg = cc.Sprite:create(s_back3)
371     gridNodeTarget:addChild(bg, 0)
372     bg:setPosition(VisibleRect:center())
373 
374     local grossini = cc.Sprite:create(s_pPathSister2)
375     --gridNodeTarget:addChild(grossini, 1)
376     grossini:setPosition( cc.p(VisibleRect:left().x+VisibleRect:getVisibleRect().width/3,VisibleRect:center().y) )
377     local sc = cc.ScaleBy:create(2, 5)
378     local sc_back = sc:reverse()
379     grossini:runAction( cc.RepeatForever:create(cc.Sequence:create(sc, sc_back) ) )
380 
381     local tamara = cc.Sprite:create(s_pPathSister1)
382     --gridNodeTarget:addChild(tamara, 1)
383     tamara:setPosition( cc.p(VisibleRect:left().x+2*VisibleRect:getVisibleRect().width/3,VisibleRect:center().y) )
384     local sc2 = cc.ScaleBy:create(2, 5)
385     local sc2_back = sc2:reverse()
386     tamara:runAction( cc.RepeatForever:create(cc.Sequence:create(sc2, sc2_back)) )
387 
388     local x, y = size.width, size.height
389 
390     titleLabel = cc.Label:createWithTTF(EffectsList[ActionIdx], s_markerFeltFontPath, 32)
391     titleLabel:setAnchorPoint(cc.p(0.5, 0.5))
392     titleLabel:setPosition(x / 2, y - 80)
393     testLayer:addChild(titleLabel)
394     titleLabel:setTag(kTagLabel)
395 
396     local item1 = cc.MenuItemImage:create(s_pPathB1, s_pPathB2)
397     local item2 = cc.MenuItemImage:create(s_pPathR1, s_pPathR2)
398     local item3 = cc.MenuItemImage:create(s_pPathF1, s_pPathF2)
399     item1:registerScriptTapHandler(backCallback)
400     item2:registerScriptTapHandler(restartCallback)
401     item3:registerScriptTapHandler(nextCallback)
402 
403     local menu = cc.Menu:create()
404     menu:addChild(item1)
405     menu:addChild(item2)
406     menu:addChild(item3)
407 
408     menu:setPosition(cc.p(0, 0))
409     item1:setPosition(cc.p(size.width/2 - item2:getContentSize().width * 2, item2:getContentSize().height / 2))
410     item2:setPosition(cc.p(size.width/2, item2:getContentSize().height / 2))
411     item3:setPosition(cc.p(size.width/2 + item2:getContentSize().width * 2, item2:getContentSize().height / 2))
412 
413     testLayer:addChild(menu, 1)
414 
415     testLayer:registerScriptHandler(onEnterOrExit)
416 
417     return testLayer
418 end
419 
420 function EffectsTest()
421     local scene = cc.Scene:create()
422 
423     ActionIdx = -1
424     scene:addChild(nextAction())
425     scene:addChild(CreateBackMenuItem())
426 
427     return scene
428 end

上面的每一个Demo返回的都是一个Action,然后调用Sprite的runAction()来执行他们。所以你只需要记着下面这些就够了,用的时候自己随便选。

这段时间在研究多Lua底层机制和与java和O-c的交互。下一篇将先贴出cocod2d-x Lua框架接口的详细解读。

也就是这些:

欢迎交流。

posted on 2014-08-26 10:40  _Ernest  阅读(1163)  评论(1)    收藏  举报

导航