【lua踩坑】timer千万不要在回调中设置自己的timer!!!

      今天有一个时间队列需求,使用lua实现的过程中遇到了一个问题,因为同一时间最多只会使用一个弹窗,所以想使用一个预制体内置一个timer做计时,每次回调重新设置timer的计时器。
      但是这就有一个问题,如果每次回调调用的都是自己的计时器的话,就会被timer直接stop掉。

function Timer:Start()
    self.running = true

    self.coroutineid = coroutine.start(function()
        while self.running do
            local delta = self.scale and Time.deltaTime or Time.fixedTime
            self.time = self.time - delta
            if self.time <= 0 then
                self.func()

                if self.loop > 0 then
                    self.loop = self.loop - 1
                    self.time = self.time + self.duration
                end

                if self.loop == 0 then
                    self:Stop()
                elseif self.loop < 0 then
                    self.time = self.time + self.duration
                end
            end
            coroutine.step()
        end
    end)
end

     也就是在调用self.func()的时候又对本身的timer进行reset与restart,因为单线程的缘故,在执行了restart之后,相当于是新开了一个coroutine进行计时,但是上一次的timer还没有停掉,还会执行后面的loop次数判断,当loop==0的时候,会把timer给关掉,这就导致了后面开启的协程不会执行到回调函数。
      嘛,反正,找到问题了最后就多做了一个预制体作为缓存,两个预制体进行切换显示,反正也算是解决了任务

你可能感兴趣的:(【lua踩坑】timer千万不要在回调中设置自己的timer!!!)