源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

806 lines
26 KiB

--非cocos自带的扩展action统一放这里
cc = cc or {}
cc.NumberBy = cc.NumberBy or BaseClass(cc.ActionInterval)
--isInteger表示数字是否以整数改变
function cc.NumberBy:__init(duration, deltaNum, isInteger,fmt)
self:initWithDuration(duration, deltaNum, isInteger,fmt)
end
function cc.NumberBy:initWithDuration(duration, deltaNum, isInteger,fmt)
cc.ActionInterval.initWithDuration(self, duration)
if isInteger == nil then
isInteger = true
end
self.isInteger = isInteger
self.deltaNum = deltaNum
self.fmt = fmt
end
function cc.NumberBy:clone()
return cc.NumberBy.New(self._duration, self.deltaNum, self.isInteger)
end
function cc.NumberBy:startWithTarget(target)
cc.ActionInterval.startWithTarget(self, target)
self.previousNum = target:GetComponent("Text").text
end
function cc.NumberBy:reverse()
return cc.NumberBy.New(self._duration, -self.deltaNum, self.isInteger)
end
function cc.NumberBy:update(t)
if (self._target) then
local newNum = tonumber(self.previousNum) + self.deltaNum * t
if self.isInteger then
newNum = math.floor(newNum)
end
if self.fmt then
newNum = string.format(self.fmt,newNum)
end
-- print("Cat:CCActionExtend.lua [36] newNum,self.isInteger,self.previousNum,self.deltaNum: ",newNum,self.isInteger,self.previousNum,self.deltaNum)
if self._target:GetComponent("Text") then
self._target:GetComponent("Text").text = newNum
end
end
end
cc.NumberTo = cc.NumberTo or BaseClass(cc.NumberBy)
--isInteger表示数字是否以整数改变
function cc.NumberTo:__init(duration, targetNum, isInteger,fmt)
self:initWithDuration(duration, targetNum, isInteger,fmt)
end
function cc.NumberTo:initWithDuration(duration, targetNum, isInteger,fmt)
cc.ActionInterval.initWithDuration(self, duration)
if isInteger == nil then
isInteger = true
end
self.isInteger = isInteger
self.targetNum = targetNum
self.fmt = fmt
end
function cc.NumberTo:clone()
return cc.NumberTo.New(self._duration, self.targetNum, self.isInteger)
end
function cc.NumberTo:startWithTarget(target)
cc.ActionInterval.startWithTarget(self, target)
self.previousNum = 0
if target:GetComponent("Text") then
self.previousNum = target:GetComponent("Text").text
end
self.deltaNum = tonumber(self.targetNum or 0)-tonumber(self.previousNum or 0)
end
function cc.NumberTo:reverse()
return nil
end
-- function cc.NumberTo:update(t)
-- if (self._target) then
-- local newNum = self.previousNum + self.deltaNum * t
-- if self.isInteger then
-- newNum = math.floor(newNum)
-- end
-- -- print("Cat:CCActionExtend.lua [36] newNum,self.isInteger,self.previousNum,self.targetNum: ",newNum,self.isInteger,self.previousNum,self.targetNum)
-- self._target:setNumber(newNum)
-- end
-- end
--不断地移动并渐现的动作
cc.FloatFadeIn = cc.FloatFadeIn or {}
function cc.FloatFadeIn.New(start_x, start_y, offset_x, offset_y, float_duration, stay_duration)
float_duration = float_duration or 1.0
stay_duration = stay_duration or 1.0
start_x = start_x or 0
start_y = start_y or 0
offset_x = offset_x or 0
offset_y = offset_y or -50
local move_up = cc.MoveBy.New(float_duration, offset_x, offset_y)
action = cc.Sequence.New(move_up, cc.DelayTime.New(stay_duration), cc.Place.New(start_x, start_y))
action = cc.RepeatForever.New(action)
return action
end
--[[
<*
@Author: ZensYue
@Description: 获取通用scale运动 支持普通widget
@param: pos 初始坐标 格式[x,y]
@param: size 初始大小 格式[x,y]
@param: scale 缩放值
@param: time 运动时间
@return: action
*>
]]
-- cc.Scale = cc.Scale or {}--废弃
-- function cc.Scale.New(pos,size,scale,time)
-- local x,y = pos.x,pos.y
-- local offx = (size.x - size.x * scale)/2
-- local offy = (size.y - size.y * scale)/2
-- local to_x,to_y = x + offx,y + offy
-- local size_action = cc.SizeTo.New(time,size.x * scale , size.y * scale)
-- local move_action = cc.MoveTo.New(time,to_x , to_y)
-- return cc.Spawn.New(size_action , move_action)
-- end
cc.ScaleX = cc.ScaleX or {}
function cc.ScaleX.New(pos,size,scale,time)
local x,y = pos.x,pos.y
local offx = (size.x - size.x * scale)/2
local offy = (size.y - size.y * scale)/2
local to_x,to_y = x + offx,y
local size_action = cc.SizeTo.New(time,size.x * scale , size.y)
local move_action = cc.MoveTo.New(time,to_x ,y)
return cc.Spawn.New(size_action , move_action)
end
--[[
<*
@Author: ZensYue
@Description: 宝箱抖动效果
@param: time 运动时间
@param: node 运动节点
@param: rotation 旋转角度
@param: height 浮动高度
@param: count 运动次数
@return: action
*>
]]
cc.Shake = cc.Shake or {}
function cc.Shake.New(time ,node, rotation , height , count)
local x,y = node:GetVectorValue(WidgetProperty.Position)
local rotation_r = cc.RotateTo.New(time,rotation)
local move_up = cc.MoveTo.New(time,x,y-height)
local action_1 = cc.Spawn.New(rotation_r,move_up)
local rotation_l = cc.RotateTo.New(time,-rotation)
local move_down = cc.MoveTo.New(time,x,y+height)
local action_2 = cc.Spawn.New(rotation_l,move_down)
local action = cc.Sequence.New(action_1,action_2)
return count and cc.Repeat.New(action,count) or cc.RepeatForever.New(action)
end
cc.FlyToRandom = cc.FlyToRandom or {}
--optional里面有好几个参数可配置,不填的话就用默认的
function cc.FlyToRandom.New(start_pos, end_pos, optional)
optional = optional or {}
local min_duration = optional.min_duration or 0.5
local rand_duration = optional.rand_duration or 0.8
local duration = min_duration + math.random()*rand_duration
local stay_duration = optional.stop_duration or 0.5--飞到背包后停留多久
local is_auto_delete = optional.auto_delete or false
-- local need_flash_on_end = optional.need_flash_on_end or true--到背包后需要闪一下
--需要在开始和终点算出随机的中间点,使其成为曲线
local middlePos = GameMath.GetVecLerp(start_pos, end_pos, 0.5)
local rotate_angle = 90
local add_or_minus = math.random(1,2)
if add_or_minus <= 1 then
rotate_angle = -rotate_angle
end
local controlPos = GameMath.RotateByAngle(start_pos, middlePos, rotate_angle)
local randNum = 0.7*math.random()+0.1
controlPos = GameMath.GetVecLerp(middlePos, controlPos, randNum)
local action = cc.BezierTo.New(duration, {end_pos=end_pos,control_1=controlPos,control_2=controlPos})
-- action = cc.EaseQuadraticActionIn.New(action)
action = cc.EaseQuarticActionIn.New(action)
-- action = cc.EaseQuinticActionIn.New(action)
-- action = cc.EaseQuarticActionIn.New(action)
-- if need_flash_on_end then
-- local function on_end_callback( )
-- GlobalEventSystem:Fire(EventName.BASE_WEALTH_ADD_AFTER, "good")
-- end
-- local move_end_action = cc.CallFunc.New(on_end_callback)
-- action = cc.Sequence.New(action, move_end_action)
-- end
action = cc.Sequence.New(action, cc.DelayTime.New(stay_duration))
if is_auto_delete then
action = cc.Sequence.New(action, cc.Delete.New())
end
return action
end
cc.FlyToBgRandom = cc.FlyToBgRandom or {}
function cc.FlyToBgRandom.New(start_pos, optional)
local view_size = Game.UI:GetScreenView()
local end_pos = {x=view_size.x-177, y=view_size.y-383}--背包坐标
return cc.FlyToRandom.New(start_pos, end_pos, optional)
end
--ScrollBy start
cc.ScrollBy = cc.ScrollBy or BaseClass(cc.ActionInterval)
function cc.ScrollBy:__init(duration, delta_x,delta_y)
self:initWithDuration(duration, delta_x,delta_y)
end
function cc.ScrollBy:clone()
return cc.ScrollBy.New(self._duration, self._positionDeltaX,self._positionDeltaY)
end
function cc.ScrollBy:reverse()
return cc.ScrollBy.New(self._duration, -self._positionDeltaX,-self._positionDeltaY)
end
function cc.ScrollBy:startWithTarget(target)
cc.ActionInterval.startWithTarget(self, target)
if target.GetVectorValue then
self._previousPositionX,self._previousPositionY = target:GetVectorValue(ScrollViewProperty.CanvasPosition)
end
-- print("Cat:ActionInterval [128] self._previousPositionX,self._previousPositionY: ",self._previousPositionX,self._previousPositionY,target.GetVectorValue,target.getPositionValue,target.getPosition)
self._startPositionX,self._startPositionY = self._previousPositionX,self._previousPositionY
end
function cc.ScrollBy:update(t)
if self._target then
local currentPosX,currentPosY = 0, 0
if self._target.GetVectorValue then
currentPosX,currentPosY = self._target:GetVectorValue(ScrollViewProperty.CanvasPosition)
end
local diffX = currentPosX - self._previousPositionX
local diffY = currentPosY - self._previousPositionY
local newPosX = self._startPositionX + (self._positionDeltaX * t)
local newPosY = self._startPositionY + (self._positionDeltaY * t)
-- self._target:SetVectorValue(WidgetProperty.Position,newPosX,newPosY)
if self._target.SetVectorValue then
self._target:SetVectorValue(ScrollViewProperty.CanvasPosition, newPosX, newPosY)
end
self._previousPositionX = newPosX
self._previousPositionY = newPosY
end
end
function cc.ScrollBy:initWithDuration(duration,delta_x,delta_y)
cc.ActionInterval.initWithDuration(self,duration)
self._positionDeltaX = delta_x
self._positionDeltaY = delta_y
end
--ScrollBy end
--ScrollTo start
cc.ScrollTo = cc.ScrollTo or BaseClass(cc.ScrollBy)
function cc.ScrollTo:__init(duration, x, y)
self:initWithPos(duration, x, y)
end
function cc.ScrollTo:initWithPos(duration, x, y)
cc.ActionInterval.initWithDuration(self, duration)
self._endPositionX = x
self._endPositionY = y
end
function cc.ScrollTo:clone()
return cc.ScrollTo.New(self._duration, self._endPositionX, self._endPositionY)
end
function cc.ScrollTo:startWithTarget(target)
cc.ScrollBy.startWithTarget(self, target)
local oldX,oldY = target:GetVectorValue(ScrollViewProperty.CanvasPosition)
self._positionDeltaX = self._endPositionX - oldX
self._positionDeltaY = self._endPositionY - oldY
end
function cc.ScrollTo:reverse()
print("reverse() not supported in ScrollTo")
return nil
end
--ScrollTo end
--FontBy start
cc.FontBy = cc.FontBy or BaseClass(cc.ActionInterval)
function cc.FontBy:__init(duration, font)
self:initWithDuration(duration, font)
end
function cc.FontBy:clone()
return cc.FontBy.New(self._duration, font)
end
function cc.FontBy:reverse()
return cc.FontBy.New(self._duration, -self._positionDeltaX,-self._positionDeltaY)
end
function cc.FontBy:startWithTarget(target)
cc.ActionInterval.startWithTarget(self, target)
if target.GetInt then
self._prefont = target:GetInt(TextBoxProperty.FontSize)
end
self._start_font = self._prefont
end
function cc.FontBy:update(t)
if self._target then
local cut_font = 0
if self._target.GetInt then
cut_font = self._target:GetInt(TextBoxProperty.FontSize)
end
local new_font = self._start_font + (self._font * t)
if self._target.SetInt then
self._target:SetInt(TextBoxProperty.FontSize, new_font)
end
self._prefont = new_font
end
end
function cc.FontBy:initWithDuration(duration,font)
cc.ActionInterval.initWithDuration(self,duration)
self._font = font
end
--FontBy end
--FontTo start
cc.FontTo = cc.FontTo or BaseClass(cc.FontBy)
function cc.FontTo:__init(duration, font)
self:initWithFont(duration, font)
end
function cc.FontTo:initWithFont(duration, font)
cc.ActionInterval.initWithDuration(self, duration)
self._end_font = font
end
function cc.FontTo:clone()
return cc.FontTo.New(duration, font)
end
function cc.FontTo:startWithTarget(target)
cc.FontBy.startWithTarget(self, target)
local old_font = target:GetInt(TextBoxProperty.FontSize)
self._font = self._end_font - old_font
end
function cc.FontTo:reverse()
print("reverse() not supported in FontTo")
return nil
end
--FontTo end
cc.FontToAction = cc.FontToAction or {}
function cc.FontToAction.New(pos,cur_font,font,time)
local x,y = pos.x,pos.y
local offx = (cur_font - font)
local offy = (cur_font - font)
local to_x,to_y = x + offx,y + offy
local size_action = cc.FontTo.New(time,font)
local move_action = cc.MoveTo.New(time,to_x , to_y)
return cc.Spawn.New(size_action , move_action)
end
--[[
Author:LZR
Description:短距离滑入动画
parameters
[1] = 时间
[2] = 节点
[3] = 移动方式
[4] = 偏移值
]]
--no_back--不回去
--SweepAction start
cc.SweepAction = cc.SweepAction or {}
function cc.SweepAction.New(time,transform,move_type,offset,no_back,fadein)
time = time or 1
offset = offset or 100
move_type = move_type or "down"
local pos = {}
pos.x,pos.y = GetAnchoredPosition(transform)
local start_x,start_y = pos.x,pos.y
local end_x,end_y = pos.x,pos.y
if not no_back then--回去(设置偏移offset的坐标再动画移动回到原点)
if move_type == "down" then
start_y = start_y - offset
elseif move_type == "up" then
start_y = start_y + offset
elseif move_type == "left" then
start_x = start_x + offset
else
start_x = start_x - offset
end
SetAnchoredPosition(transform,start_x,start_y)
else----不回去(动画移动偏移offset的坐标)
if move_type == "down" then
end_y = end_y - offset
elseif move_type == "up" then
end_y = end_y + offset
elseif move_type == "left" then
end_x = end_x - offset
else
end_x = end_x + offset
end
-- print("huangcong:ActionExtend [start:429] :",pos.x, end_x, move_type)
end
local action = cc.MoveTo.createAnchoredType(time,end_x,end_y)
-- if fadein then--同时执行透明和位置移动
-- local fade_action = cc.FadeTo.New(time,1,true)
-- action = cc.Spawn.New(action,fade_action)
-- end
local elastic_in_time = 3
local elastic_out_time = 5
action = cc.EaseElasticIn.New(action,elastic_in_time)
action = cc.EaseElasticOut.New(action,elastic_out_time)
local call_func = cc.CallFunc.New(cc.ActionManager:getInstance():removeAllActionsFromTarget(transform))
action = cc.Sequence.New(action, call_func)
return action
end
--SweepAction end
--[[
Author:LZR
Description:虎躯一震(心跳效果)
parameters
[1] = 时间
[2] = 对象
[3] = 延迟时间
[3] = 收缩比例
[4] = 放大比例
[5] = 行为时间比例{收缩时长,放大时长,复原时长}
]]
--HeartBeat start
cc.HeartBeat = cc.HeartBeat or {}
function cc.HeartBeat.New(time,obj,delay_time,scaleInfo1,scaleInfo2,time_auto)
if obj == nil then return end
delay_time = delay_time or 0
time = time or 1
scaleInfo = scaleInfo or 0.9
scaleInfo2 = scaleInfo2 or 1.1
time_auto = time_auto or {30,20,40}
local scaleNum = scaleInfo
local x,y = obj:GetVectorValue(WidgetProperty.Position)
local sx,sy = obj:GetVectorValue(WidgetProperty.Size)
local function getmovepos(scale)
local _sx,_sy = obj:GetVectorValue(WidgetProperty.Size)
local new_sx,new_sy = _sx * scale, _sy * scale
local mx,my = (_sx - new_sx)/2, (_sy - new_sy)/2
return mx,my
end
local action1,action2,action3
local action1_1 = cc.SizeTo.New(time*(time_auto[1]/100), sx*scaleNum,sy*scaleNum)
local _x,_y = getmovepos(scaleNum)
local action1_2 = cc.MoveTo.New(time*(time_auto[1]/100), x+_x,y+_y)
action1 = cc.Spawn.New(action1_1, action1_2)
action1 = cc.EaseSineIn.New(action1)
scaleNum2 = (1/scaleInfo * scaleInfo2)
local action2_1 = cc.SizeTo.New(time*(time_auto[2]/100), sx*scaleNum2,sy*scaleNum2)
_x,_y = getmovepos(scaleNum2)
local action2_2 = cc.MoveTo.New(time*(time_auto[2]/100), x+_x,y+_y )
action2 = cc.Spawn.New(action2_1, action2_2)
action2 = cc.EaseSineOut.New(action2)
scaleNum3 = (1/(1/scaleInfo * scaleInfo2))
local action_3_1 = cc.SizeTo.New(time*(time_auto[3]/100), sx,sy)
local action_3_2 = cc.MoveTo.New(time*(time_auto[3]/100), x,y)
action3 = cc.Spawn.New(action_3_1, action_3_2)
action3 = cc.EaseSineOut.New(action3)
local action = cc.Sequence.New(cc.DelayTime.New(delay_time),action1, action2, action3)
return action
end
--[[
Author:huangcong
Description:重物掉落震动 节点需要挂载CanvasGroup(以便遍历子节点的透明度)
parameters
data.transform--节点
data.delay_time or 0.8--时间
data.init_scale or 2--初始大小
data.end_scale or 1--结束大小
data.start_pos or {x = -200,y = -50}--初始坐标
data.end_pos or {x = -200,y = -50}--结束坐标
data.init_alpha or 0--初始透明度
data.end_alpha or 0--初始透明度
]]
--HeartBeat start
cc.FallingVibration = cc.FallingVibration or {}
function cc.FallingVibration.New(data)
if data == nil or data.transform == nil then return end
local transform = data.transform--节点
local delay_time = data.delay_time or 0.8--时间
local init_scale = data.init_scale or 2--初始大小
local end_scale = data.end_scale or 1--结束大小
local start_pos = data.start_pos or {x = -200,y = -50}--初始坐标
local end_pos = data.end_pos or {x = -200,y = -50}--结束坐标
local init_alpha = data.init_alpha or 0--初始透明度
local end_alpha = data.end_alpha or 1--初始透明度
transform:GetComponent("CanvasGroup").alpha = init_alpha
transform.localScale = Vector3(init_scale,init_scale,init_scale)
SetAnchoredPosition(transform,start_pos.x,start_pos.y)
local function alphaChangeFunc( percent )
transform:GetComponent("CanvasGroup").alpha = percent*end_alpha
end
--设置透明度变化
local alpha_action = cc.CustomUpdate.New(delay_time,alphaChangeFunc)
--设置大小变化
local scale_action = cc.ScaleTo.New(delay_time,end_scale,end_scale,end_scale)
--设置移动方式
local move_action = cc.MoveTo.createAnchoredType(delay_time,end_pos.x,end_pos.y)
local elastic_in_time = 5
local elastic_out_time = 5
move_action = cc.EaseElasticIn.New(move_action,elastic_in_time)--缓动1
-- move_action = cc.EaseElasticOut.New(move_action,elastic_out_time)--缓动2
--合并动画列表
local action_list = cc.Spawn.New(alpha_action,scale_action)--同时执行三个动作
action_list = cc.Spawn.New(action_list,move_action)--同时执行三个动作
local function end_func( ... )
cc.ActionManager:getInstance():removeAllActionsFromTarget(transform)
if data.end_call_func then
data.end_call_func()
end
end
local call_func = cc.CallFunc.New(end_func)
action_list = cc.Sequence.New(action_list, call_func)
return action_list
end
--HeartBeat end
--Ellipse 椭圆运动
cc.Ellipse = cc.Ellipse or BaseClass(cc.ActionInterval)
function cc.Ellipse:__init(config)
self.config = config
self:initWithDuration(config.time)
end
function cc.Ellipse:clone()
return cc.Ellipse.New(self.config)
end
function cc.Ellipse:reverse()
self.config.moveInAnticlockwise = not self.config.moveInAnticlockwise
return cc.Ellipse.New(self.config)
end
function cc.Ellipse:startWithTarget(target)
cc.ActionInterval.startWithTarget(self, target)
end
function cc.Ellipse:update(t)
if self._target then
local p = self._target.ellipse_p or 0
local x = self.config:GetPositionXAtOval(t + p)
local y = self.config:GetPositionYAtOval(t + p)
cc.Wrapper.SetLocalPosition(self._target,x,y)
end
end
function cc.Ellipse:initWithDuration(duration)
cc.ActionInterval.initWithDuration(self,duration)
end
cc.SliderAction = cc.SliderAction or {}
--duration*时间
--target*进度条对象
--num*需要变化的值
--sum_num*值的总数
function cc.SliderAction.New(duration, target, num, sum_num)
local speed = num/duration
local delay_time = 0.1
local time_sum = 0
local function change_value( ... )--变化方法
time_sum = time_sum + delay_time
local cur_num = speed * (time_sum + delay_time)
target.value = cur_num/ sum_num
if cur_num >= num then
target.value = num / sum_num
cc.ActionManager:getInstance():removeAllActionsFromTarget(target)
end
end
local action = cc.DelayTime.New(delay_time)--每次加一次 延迟一次
action = cc.Sequence.New(cc.CallFunc.New(change_value),cc.DelayTime.New(delay_time))
cc.ActionManager:getInstance():addAction(cc.RepeatForever.New(action), target)
end
cc.SliderBy = cc.SliderBy or BaseClass(cc.ActionInterval)--图片进度条增长动画
--duration*时间
--deltaNum*比例系数
--isInteger表示数字是否以整数改变
function cc.SliderBy:__init(duration, deltaNum, sum_num,cur_num)
self:initWithDuration(duration, deltaNum,sum_num,cur_num)
end
function cc.SliderBy:initWithDuration(duration, deltaNum,sum_num,cur_num)
cc.ActionInterval.initWithDuration(self, duration)
self.deltaNum = deltaNum
self.sum_num = sum_num or 1
self.cur_num = cur_num or 0
end
function cc.SliderBy:clone()
return cc.SliderBy.New(self._duration, self.deltaNum, self.sum_num, self.cur_num)
end
function cc.SliderBy:startWithTarget(target)
cc.ActionInterval.startWithTarget(self, target)
self.previousNum = self.cur_num
end
function cc.SliderBy:reverse()
return cc.SliderBy.New(self._duration, -self.deltaNum, self.sum_num, self.cur_num)
end
function cc.SliderBy:update(t)
if (self._target) then
local newNum = self.previousNum + (self.deltaNum * t) * (self.sum_num)
SetSizeDeltaX(self._target,newNum)
end
end
cc.SliderTextBy = cc.SliderTextBy or BaseClass(cc.ActionInterval)--字体增长动画
--duration*时间
--cur_num*变化初始值 假设为10
--anim_num*变化值 假设为90(最终值就是100)
--add_str*添加字符串 默认为"%s" --后面要用到string.format()这样可以支持更多格式 比如变化一个“当前VIP经验+%s”
function cc.SliderTextBy:__init(duration,cur_num,anim_num,add_str)
self:initWithDuration(duration, cur_num, anim_num, add_str)
end
function cc.SliderTextBy:initWithDuration(duration, cur_num, anim_num, add_str)
cc.ActionInterval.initWithDuration(self, duration)
self.add_str = add_str or "%s"
self.anim_num = anim_num or 0
self.cur_num = cur_num or 0
end
function cc.SliderTextBy:clone()
return cc.SliderTextBy.New(self._duration, self.cur_num, self.anim_num, self.add_str)
end
function cc.SliderTextBy:startWithTarget(target)
cc.ActionInterval.startWithTarget(self, target)
self.previousNum = self.cur_num
end
function cc.SliderTextBy:reverse()
return cc.SliderTextBy.New(self._duration, self.cur_num, -self.anim_num, self.add_str)
end
function cc.SliderTextBy:update(t)
if (self._target) then
local newNum = self.previousNum + (self.anim_num * t)
newNum = math.floor(newNum)
self._target.text = string.format(self.add_str,newNum)
end
end
cc.SliderByNew = cc.SliderByNew or BaseClass(cc.ActionInterval)--图片进度条增长动画(区别于另一种 使用fillamout)
--duration*时间
--cur_num当前值
--end_num结束值
--sum_num总值
--必须传入image组件(imageEx没试过 你们可以试试)
function cc.SliderByNew:__init(duration, cur_num, end_num, sum_num)
self:initWithDuration(duration, cur_num, end_num, sum_num)
end
function cc.SliderByNew.createSizeType(duration, cur_num, end_num, sum_num)
local action = cc.SliderByNew.New(duration, cur_num, end_num, sum_num)
action.set_size_type = true
return action
end
function cc.SliderByNew:initWithDuration(duration, cur_num, end_num, sum_num)
cc.ActionInterval.initWithDuration(self, duration)
self.sum_num = sum_num or 1
self.cur_num = cur_num or 0
self.end_num = end_num or 0
end
function cc.SliderByNew:clone()
return cc.SliderByNew.New(self._duration, self.cur_num, self.end_num, self.sum_num)
end
function cc.SliderByNew:startWithTarget(target)
cc.ActionInterval.startWithTarget(self, target)
self.previousNum = self.cur_num
end
function cc.SliderByNew:reverse()
return cc.SliderByNew.New(self._duration, self.end_num, self.cur_num, self.sum_num)
end
function cc.SliderByNew:update(t)
if (self._target) then
local newNum = self.previousNum + t * (self.end_num- self.cur_num)
if self.set_size_type then
SetSizeDeltaX(self._target, newNum)
else
self._target.fillAmount = newNum / self.sum_num
end
end
end
--ChangeImage start
cc.ChangeImage = cc.ChangeImage or BaseClass(cc.ActionInstant)
function cc.ChangeImage:__init( image_info )
self.image_info = image_info
end
function cc.ChangeImage:clone()
return cc.ChangeImage.New(self.image_info)
end
function cc.ChangeImage:reverse()
return self:clone()
end
function cc.ChangeImage:update(time)
if not self._target then return end
lua_resM:setImageSprite(self.image_info.arge_self, self.image_info.image or self._target, self.image_info.abName, self.image_info.resName, self.image_info.auto_size, self.image_info.load_call_back)
end
--Alpha end
--DestroyObject start
cc.DestroyObject = cc.DestroyObject or BaseClass(cc.ActionInstant)
function cc.DestroyObject:__init()
end
function cc.DestroyObject:clone()
return cc.DestroyObject.New()
end
function cc.DestroyObject:update(time)
cc.Wrapper.DestroyObject(self._target)
end
--DestroyObject end
--CustomUpdate start
cc.CustomUpdate = cc.CustomUpdate or BaseClass(cc.ActionInterval)
--别用.New了,用create前缀的接口
function cc.CustomUpdate:__init(duration, call_back)
self:init(duration, call_back)
end
function cc.CustomUpdate:init(duration, call_back)
cc.ActionInterval.initWithDuration(self, duration)
self._call_back = call_back
end
function cc.CustomUpdate:clone()
local action = cc.CustomUpdate.New()
action:init(self._duration, self._call_back)
return action
end
function cc.CustomUpdate:reverse()
return nil
end
function cc.CustomUpdate:startWithTarget(target)
cc.ActionInterval.startWithTarget(self, target)
end
function cc.CustomUpdate:update(t)
if self._call_back then
self._call_back(t)
end
end
--CustomUpdate end