-- 使用新动画(参考跑得快过来) local DDZNewEffectHelper = class("DDZNewEffectHelper") local PokerUtil = require('pk_nanchongdoudizhu.luaScript.Views.Room.newPokerUtil') function DDZNewEffectHelper:ctor( o ) end -- 新顺子,不知道为何,imageview不能更改为node function DDZNewEffectHelper:getShunziNew() local node = cc.ImageView:create() node:setOpacity(0) node.onEnter = function (nd) -- 顺子两字 local img_shun = cc.ImageView:create() local img_zi = cc.ImageView:create() img_shun:loadTexture('pk_nanchongdoudizhu/res/ui/zy_fangjian/doudizhu_cardsAni/zy_ddz_shunzi/zy_ddz_img_shun.png') img_shun:setPositionX(img_shun:getPositionX() - 50) img_zi:loadTexture('pk_nanchongdoudizhu/res/ui/zy_fangjian/doudizhu_cardsAni/zy_ddz_shunzi/zy_ddz_img_zi.png') img_zi:setPositionX(img_zi:getPositionX() + 50) node:addChild(img_shun) node:addChild(img_zi) -- 顺子模糊动画 local img_shun_mohu = cc.ImageView:create() local img_zi_mohu = cc.ImageView:create() img_shun_mohu:loadTexture('pk_nanchongdoudizhu/res/ui/zy_fangjian/doudizhu_cardsAni/zy_ddz_shunzi/zy_ddz_img_shunmohu_1.png') img_shun_mohu:setPositionX(img_shun:getPositionX() + 300) img_shun_mohu:setPositionY(img_shun:getPositionY()) img_zi_mohu:loadTexture('pk_nanchongdoudizhu/res/ui/zy_fangjian/doudizhu_cardsAni/zy_ddz_shunzi/zy_ddz_img_shunmohu_2.png') img_zi_mohu:setPositionX(img_zi:getPositionX() + 300) img_zi_mohu:setPositionY(img_zi:getPositionY()) node:addChild(img_shun_mohu) node:addChild(img_zi_mohu) -- 移除本体 local function removeSelf() node:runAction(cc.Sequence:create(cc.FadeOut:create(0.05), cc.CallFunc:create(function() node:removeFromParent() end))) end -- 模糊动画 local function showMoHu() local shun_time = 0.2 local zi_time = 0.4 -- 顺_模糊字 local shun_moveTo = cc.MoveTo:create(shun_time, cc.p(img_shun:getPositionX(), img_shun:getPositionY())) local shun_removeCallback = cc.CallFunc:create(function() img_shun_mohu:removeFromParent() end) local shun_seqAni = cc.Sequence:create(shun_moveTo, shun_removeCallback) img_shun_mohu:runAction(shun_seqAni) -- 子_模糊字 local zi_moveTo = cc.MoveTo:create(zi_time, cc.p(img_zi:getPositionX(), img_zi:getPositionY())) local zi_removeCallback = cc.CallFunc:create(function() img_zi_mohu:removeFromParent() end) local zi_seqAni = cc.Sequence:create(zi_moveTo, zi_removeCallback) img_zi_mohu:runAction(zi_seqAni) end -- 粒子光动画 local function showLizi_Light() local lizi_light = cc.ImageView:create() lizi_light:setPosition(cc.p(img_zi:getPositionX() + 100, img_zi:getPositionY())) node:addChild(lizi_light) for i = 1, 15 do local ac = cc.Sequence:create(cc.DelayTime:create(0.05*(i-1)), cc.CallFunc:create(function () lizi_light:loadTexture(string.format("zy_ddz_CardFX_ShunZi_Sheet1_%02d.png", i), 1) end)) lizi_light:runAction(cc.Spawn:create(ac, cc.MoveBy:create(0.7, cc.p(-20, 0)))) end lizi_light:runAction(cc.Sequence:create(cc.DelayTime:create(0.7), cc.FadeOut:create(0.1), cc.CallFunc:create(function() lizi_light:removeFromParent() end))) end -- 粒子风动画 local function showLizi_Wind() local lizi_wind = cc.ImageView:create() lizi_wind:setPosition(cc.p(img_zi:getPositionX() + 100, img_zi:getPositionY())) lizi_wind:setOpacity(100) node:addChild(lizi_wind) for i = 1, 13 do local ac = cc.Sequence:create(cc.DelayTime:create(0.05*(i-1)), cc.CallFunc:create(function () lizi_wind:loadTexture(string.format("zy_ddz_CardFX_ShunZi_Sheet2_%02d.png", i), 1) end)) lizi_wind:runAction(cc.Spawn:create(ac, cc.MoveBy:create(0.7, cc.p(-20, 0)))) end lizi_wind:runAction(cc.Sequence:create(cc.DelayTime:create(0.7), cc.FadeOut:create(0.1), cc.CallFunc:create(function() lizi_wind:removeFromParent() removeSelf() end))) end -- 动画播放 local spawnAni = cc.Spawn:create( cc.FadeIn:create(0.1), cc.CallFunc:create(showMoHu), cc.CallFunc:create(showLizi_Light), cc.CallFunc:create(showLizi_Wind) ) nd:runAction(spawnAni) end return node end -- 新连对 function DDZNewEffectHelper:getLianduiNew() local node = cc.ImageView:create() node.onEnter = function (nd) -- 移除本体 local function removeSelf() node:runAction(cc.Sequence:create(cc.FadeOut:create(0.02), cc.CallFunc:create(function() node:removeFromParent() end))) end local img_liandui = cc.ImageView:create() img_liandui:loadTexture('zy_ddz_CardFX_LianDui_2.png', 1) img_liandui:setScale(2) img_liandui:setLocalZOrder(5) node:addChild(img_liandui) -- 添加模糊 local function showMoHu() -- 这里需要用到颜色混合,所以用sprite local img_mohu = cc.Sprite:create() img_mohu:setSpriteFrame('zy_ddz_CardFX_LianDui_1.png') img_mohu:setScale(2.5) img_mohu:setLocalZOrder(1) node:addChild(img_mohu) local seqAni_mohu = cc.Sequence:create( cc.ScaleTo:create(0.2, 1.3), cc.FadeTo:create(0.6, 0), cc.CallFunc:create(function() img_mohu:removeFromParent() end) ) img_mohu:runAction(seqAni_mohu) local img_light = cc.Sprite:create() img_light:setSpriteFrame('zy_ddz_CardFX_LianDui_3.png') img_light:setScale(3.2, 1.6) img_light:setLocalZOrder(2) img_light:setOpacity(160) img_light:setBlendFunc(gl.ONE, gl.ONE) node:addChild(img_light) local seqAni_light = cc.Sequence:create( cc.ScaleTo:create(0.2, 1.3), cc.FadeTo:create(0.4, 0), cc.CallFunc:create(function() img_light:setVisible(false) end), cc.DelayTime:create(0.3), cc.CallFunc:create(function() img_light:removeFromParent() img_liandui:removeFromParent() removeSelf() end) ) img_light:runAction(seqAni_light) end local seqAni = cc.Sequence:create( cc.ScaleTo:create(0.2, 0.8), cc.ScaleTo:create(0.1, 0.9), cc.Spawn:create(cc.ScaleTo:create(0.1, 0.6), cc.CallFunc:create(showMoHu)) ) img_liandui:runAction(seqAni) end return node end -- 新炸弹 function DDZNewEffectHelper:getBombNew() local node = cc.ImageView:create() node.onEnter = function (nd) -- 移除本体 local function removeSelf() node:runAction(cc.Sequence:create(cc.FadeOut:create(0.05), cc.CallFunc:create(function() node:removeFromParent() end))) end local img_bomb = cc.ImageView:create() img_bomb:loadTexture('pk_nanchongdoudizhu/res/ui/zy_fangjian/doudizhu_cardsAni/zy_ddz_bomb/zy_ddz_zhadan.png') img_bomb:setScale(0.1) img_bomb:setRotation(math.random(0, 30)) node:addChild(img_bomb) local time = 0.2 local winSize = cc.Director:getInstance():getWinSize() local worldPos = cc.p(winSize.width/2, winSize.height/2 + 80) local localPos = node:convertToNodeSpace(worldPos) local function endSeqCallFunc() img_bomb:setVisible(false) -- 地板裂痕 local img_floor_lizi = cc.ImageView:create() img_floor_lizi:loadTexture('pk_nanchongdoudizhu/res/ui/zy_fangjian/doudizhu_cardsAni/zy_ddz_bomb/zy_ddz_dilie.png') img_floor_lizi:setScale(0.2) img_floor_lizi:setPosition(cc.p(localPos.x, localPos.y - 50)) node:addChild(img_floor_lizi) local ani_scale_floor = cc.ScaleTo:create(0.1, 0.6) img_floor_lizi:runAction(ani_scale_floor) -- 爆炸光晕 local img_boom_yun = cc.ImageView:create() img_boom_yun:loadTexture('pk_nanchongdoudizhu/res/ui/zy_fangjian/doudizhu_cardsAni/zy_ddz_bomb/zy_ddz_zdguang_1.png') img_boom_yun:setScale(2) img_boom_yun:setOpacity(150) img_boom_yun:setPosition(cc.p(localPos.x, localPos.y - 20)) node:addChild(img_boom_yun) local ani_fade_yun = cc.FadeTo:create(0.5, 0) img_boom_yun:runAction(ani_fade_yun) -- 爆炸粒子 local img_bomb_lizi = cc.ImageView:create() img_bomb_lizi:setScale(1.5) img_bomb_lizi:setPosition(localPos) node:addChild(img_bomb_lizi) for i=1,14 do local ac = cc.Sequence:create(cc.DelayTime:create(0.05*(i-1)), cc.CallFunc:create(function () img_bomb_lizi:loadTexture(string.format("zy_ddz_CardFX_ZhaDan_Sheet1_%02d.png", i), 1) end)) img_bomb_lizi:runAction(ac) end img_bomb_lizi:runAction(cc.Sequence:create(cc.DelayTime:create(0.05*14), cc.CallFunc:create(function() img_bomb_lizi:removeFromParent() img_boom_yun:removeFromParent() img_floor_lizi:removeFromParent() img_bomb:removeFromParent() removeSelf() end))) end local seqAni = cc.Sequence:create( cc.Spawn:create( cc.RotateBy:create(time, 60), cc.ScaleTo:create(time, 0.4), cc.MoveTo:create(time, localPos) ), cc.CallFunc:create(endSeqCallFunc) ) img_bomb:runAction(seqAni) end return node end -- 新飞机 function DDZNewEffectHelper:getPlanNew() local node = cc.ImageView:create() node.onEnter = function (nd) local plane = cc.ImageView:create() plane:loadTexture('pk_nanchongdoudizhu/res/ui/zy_fangjian/doudizhu_cardsAni/zy_ddz_plan/zy_ddz_feiji.png') plane:setAnchorPoint(cc.p(0.5, 0.5)) plane:setScale(0.5) plane:setEulerRotation(cc.vec3(0, 0, 70)) node:addChild(plane) -- 添加尾气 local weiqi = cc.ImageView:create() local weiqiRes = 'pk_nanchongdoudizhu/res/ui/zy_fangjian/doudizhu_cardsAni/zy_ddz_plan/zy_ddz_weiqi_1.png' weiqi:loadTexture(weiqiRes) weiqi:setPosition(cc.p(plane:getContentSize().width - 30, plane:getContentSize().height/2 - 20)) weiqi:setLocalZOrder(-1) plane:addChild(weiqi) -- 尾气动画 local changeFrameTime = 0.1 local frameIndex = 1 local frameMaxIndex = 2 local function changeImage() frameIndex = frameIndex + 1 if frameIndex > frameMaxIndex then frameIndex = 1 end weiqiRes = string.format('pk_nanchongdoudizhu/res/ui/zy_fangjian/doudizhu_cardsAni/zy_ddz_plan/zy_ddz_weiqi_%d.png', frameIndex) weiqi:loadTexture(weiqiRes) end weiqi:runAction(cc.RepeatForever:create(cc.Sequence:create(cc.DelayTime:create(changeFrameTime), cc.CallFunc:create(changeImage)))) -- 移除本体 local function removeSelf() node:runAction(cc.Sequence:create(cc.FadeOut:create(0.1), cc.CallFunc:create(function() plane:removeFromParent() node:removeFromParent() end))) end local winSize = cc.Director:getInstance():getWinSize() local StartWorldPos = cc.p(winSize.width + 100, winSize.height + 200) local startPos = node:convertToNodeSpace(StartWorldPos) plane:setPosition(startPos) local time = 1.2 local angle = -100 -- 旋转度数 local newAngle = 2 * math.pi * angle / 360 -- π是半圈,貌似被更改了底层 local pos1 = node:convertToNodeSpace(cc.p(winSize.width, 0)) local pos2 = node:convertToNodeSpace(cc.p(winSize.width/2, 0)) local endPos = node:convertToNodeSpace(cc.p(-300, winSize.height + 300)) local bezier = { pos1, pos2, endPos } local aniBez = cc.EaseIn:create(cc.BezierTo:create(time, bezier), 1.5) local aniRotateBy = cc.EaseIn:create(cc.RotateBy:create(time, newAngle), 1.8) local aniScaleTo = cc.EaseIn:create(cc.ScaleTo:create(time, 2), 2) local spaAni = cc.Spawn:create( aniBez, aniRotateBy, aniScaleTo ) local seqAni = cc.Sequence:create( spaAni, cc.CallFunc:create(removeSelf) ) plane:runAction(seqAni) end return node end -- 新王炸 function DDZNewEffectHelper:getKingBombNew() local node = cc.ImageView:create() node:setOpacity(0) node.onEnter = function() local nd = cc.ImageView:create() node:addChild(nd) local winSize = cc.Director:getInstance():getWinSize() local worldPos = cc.p(winSize.width/2 + 8, winSize.height/2 + 80) local localPos = node:convertToNodeSpace(worldPos) nd:setPosition(localPos) local frameDelay = 0.032 for i=1,31 do local ac = cc.Sequence:create(cc.DelayTime:create(frameDelay*(i-1)), cc.CallFunc:create(function () nd:loadTexture(string.format("doudizhu_Ani_KingBomb_%d.png", i), 1) end)) nd:runAction(ac) end node:runAction(cc.Sequence:create(cc.FadeIn:create(0.3), cc.DelayTime:create(frameDelay * 30 - 0.3), cc.FadeOut:create(0.1), cc.CallFunc:create(function() node:removeFromParent() end))) end return node end -- 翻拍动画,传入牌值 function DDZNewEffectHelper:fanPaiAni(card, onEnd) local node = cc.Node:create() local nodeCard = cc.ImageView:create() nodeCard:loadTexture(string.format("ddz_cards_%d_%d.png", PokerUtil:getCardType(card), PokerUtil:getCardValue(card)), 1) nodeCard:setScale(cc.p(0, 1)) node:addChild(nodeCard) local nodeBackCard = cc.ImageView:create() nodeBackCard:loadTexture('ddz_cards_0.png', 1) node:addChild(nodeBackCard) local scaleBack = cc.ScaleTo:create(0.2, 0, 1, 1) local callbackBack = cc.CallFunc:create(function() nodeBackCard:setVisible(false) local scaleCard = cc.ScaleTo:create(0.2, 1, 1, 1) local removeDelayTime = 0.6 local callbackCard = cc.CallFunc:create(function() if onEnd then onEnd() end node:removeFromParent() end) nodeCard:runAction(cc.Sequence:create(scaleCard, cc.DelayTime:create(removeDelayTime), callbackCard)) end) nodeBackCard:runAction(cc.Sequence:create(scaleBack, callbackBack)) return node end return DDZNewEffectHelper