lua实现定时器
Posted 絮叨ing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua实现定时器相关的知识,希望对你有一定的参考价值。
先接入这个类中的循环,然后调用这个接口TimerCounter.CreateTimer(时间(按秒传入),function()end)
module("TimerCounter", package.seeall )
local _timerDict = {}
local quest_list = {}
TimerData = {}
function TimerData:new(t, func, arg, unscale)
local self = {}
setmetatable( self, {__index = TimerData} )
self.time = t
self.callfunc = func
self.args = arg
self.unscale = unscale
return self
end
function CreateTimer(t, func, arg, unscale)
local timer = TimerData:new(t, func, arg, unscale)
_timerDict[timer] = 0
return timer
end
function StopTimer(timer)
_timerDict[timer] = nil
end
function TimerCounter:AddTimesTimer(callback, delay_time, times)
local t = {callback, delay_time, UnityEngine.Time.unscaledTime + delay_time, times}
quest_list[t] = t
return t
end
function TimerCounter:AddDelayTimer(callback, delay_time)
return self:AddTimesTimer(callback, delay_time, 1)
end
function TimerCounter:AddRunQuest(callback, delay_time)
return self:AddTimesTimer(callback, delay_time, 999999999)
end
function TimerCounter:CancelQuest(quest)
if quest == nil then return end
quest_list[quest] = nil
end
function TimerCounter:UpdateQuest()
local callback_list = {}
for k, v in pairs(quest_list) do
if v[4] <= 0 then
quest_list[k] = nil
else
if v[3] <= UnityEngine.Time.unscaledTime then
table.insert(callback_list, k)
v[3] = UnityEngine.Time.unscaledTime
v[3] = v[3] + v[2]
v[4] = v[4] - 1
end
end
end
local quest = nil
for k, v in pairs(callback_list) do
quest = quest_list[v]
if nil ~= quest then
quest[1]()
end
end
end
function Update(deltime, unscaledDeltaTime)
for i, v in pairs(_timerDict) do
local t
if i.unscale then
t = v + unscaledDeltaTime
else
t = v + deltime
end
if t >= i.time then
i.callfunc(i.args)
_timerDict[i] = nil
else
_timerDict[i] = t
end
end
UpdateQuest()
end
最后插一则寓言小故事:
信念是一种无坚不催的力量,当你坚信自己能成功时,你必能成功。
一天,我发现,一只黑蜘蛛在后院的两檐之间结了一张很大的网。难道蜘蛛会飞?要不,从这个檐头到那个檐头,中间有一丈余宽,第一根线是怎么拉过去的?后来,我发现蜘蛛走了许多弯路--从一个檐头起,打结,顺墙而下,一步一步向前爬,小心翼翼,翘起尾部,不让丝沾到地面的沙石或别的物体上,走过空地,再爬上对面的檐头,高度差不多了,再把丝收紧,以后也是如此。
温馨提示:蜘蛛不会飞翔,但它能够把网凌结在半空中。它是勤奋、敏感、沉默而坚韧的昆虫,它的网制得精巧而规矩,八卦形地张开,仿佛得到神助。这样的成绩,使人不由想起那些沉默寡言的人和一些深藏不露的智者。于是,我记住了蜘蛛不会飞翔,但它照样把网结在空中。奇迹是执着者造成的。
以上是关于lua实现定时器的主要内容,如果未能解决你的问题,请参考以下文章