《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框架接口的详细解读。
也就是这些:
欢迎交流。
浙公网安备 33010602011771号