bug描述
今天做倒计时的时候,发现了一个bug,偶尔倒计时一开始显示的59:59。最开始以为是倒计时计时钱前没有将Text重置,后面发现重置了也会出现这个问题。
bug查找
打断点,打log,一直找不到问题所在。突然眼前灵光一闪,难道是计算出来的数值有问题?
代码如下,欢迎各位品尝
--时间戳转换为 00:00:00 格式
local function FormatTime(second)
local min = math.floor(second % 3600 / 60)
local sec = second % 60
return string.format("%02d:%02d", min, sec)
end
local funciton CountDown(second)
ui.tm = base:findtext("Text")
local now = os.time()
local startTm = XX;
local matchTimer = now - startTm--获取相隔时间戳
ui.cor2 = coroutine.start(function()
while (true) do
ui.tm.text = FormatTime(matchTimer)
coroutine.wait(1)
matchTimer = matchTimer + 1
end
end)
end
bug分析
果然,真的是数值的问题,发现倒计时时间戳计算结果是-1,经过格式化转换,就变成了59:59。当传进去的参参数是-1时,FormatTime返回的值就是 59:59
bug解决
控制间隔值不低于1,即可避免问题发生,使用math.max控制,如下:
matchTimer = math.max(now - startTm,0)