【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给关掉,这就导致了后面开启的协程不会执行到回调函数。
      嘛,反正,找到问题了最后就多做了一个预制体作为缓存,两个预制体进行切换显示,反正也算是解决了任务

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。