源战役客户端
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.
 
 
 
 
 

59 rivejä
2.7 KiB

UICommonAction = UICommonAction or {}
local cc = cc
-- local TweenFunc = TweenFunc
-- 通用UI进度条动画
-- 参数: img 挂载了image组件的对象,必传
-- round 当进度条有转满表现的时候,这里代表转满了几次 整数
-- end_progress 进度条最终的进度 这里为0~1的值
-- time 动画持续时间,不传代表立即转完
-- duration_callback 跑进度时的回调,参数会传当前的动画进度百分数
-- end_callback 结束回调,可不传
-- tween_func 进度条缓动函数,可不传,默认 TweenFunc.easeOutQuint
function ImageProgressAction(img, round, end_progress, time, duration_callback, end_callback, tween_func)
assert(img ~= nil, "Image Transform can not be null!")
local img_cpn = img:GetComponent(typeof(UnityEngine.UI.Image))
assert(img_cpn ~= nil, "Image Transform doesn't have Image Component!")
ClearImageProgressAction(img)
-- 设置默认缓动函数
tween_func = tween_func or TweenFunc.easeOutQuint
-- 当前进度百分数
local cur_percentage = img_cpn.fillAmount
-- 动画中【进度的增量】
local add_percentage = 0
if round <= 0 then -- 从当前进度过渡到最终进度,没有出现转弯一圈的情况,增量就是简单的最终进度百分数减去当前进度百分数
add_percentage = end_progress - cur_percentage
else -- 进度转了一圈以上,需要处理增加的进度,由于要从当前进度百分数开始动画,所以要先减去当前进度百分数
add_percentage = round - cur_percentage + end_progress
end
-- 进度增量不能小于0
-- add_percentage = add_percentage <= 0 and 0 or add_percentage
local function action_percentage_func(percent)
local real_pec = tween_func(percent)
-- 加上cur_percentage的原因是要从当前进度的位置开始做动画表现
local _, final_percentage = math.modf(cur_percentage + add_percentage * real_pec);
img_cpn.fillAmount = final_percentage
-- 将当前的动画进度百分数传入回调
if duration_callback then
duration_callback(real_pec)
end
end
if not time or time <= 0 then
action_percentage_func(1)
else
local action_percentage = cc.CustomUpdate.New(time, action_percentage_func)
if end_callback then
action_percentage = cc.Sequence.New(action_percentage, cc.CallFunc.New(end_callback))
end
cc.ActionManager:getInstance():addAction(action_percentage, img)
end
end
function ClearImageProgressAction(img)
assert(img ~= nil, "Image Transform can not be null!")
cc.ActionManager:getInstance():removeAllActionsFromTarget(img)
end