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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值