注:此博客从个人博客园移植而来
在3.x lua其定时器的使用方式主要有两种:
1. 帧刷新
顾名思义,每帧都会调用,在Node及其子类中使用,无法自定义时间间隔
调用方法为:scheduleUpdateWithPriorityLua
销毁方法为:unscheduleUpdate
local function frameUpdate(dt)
count2 = count2 + dt
self._states[2]:setString("帧刷新时间:" .. count2)
end
--[[
self为Node相关
参数1: 回调接口用于刷新 参数2: 刷新优先级
其调用实质上就是C++中的 scheduleUpdate , 该方法会在每帧调用C++中的 update 方法
在cocoslua的NodeEx.lua中 Node.scheduleUpdate 的实现就是此方法
在销毁的时候,一定要注意调用 self:unscheduleUpdate() 方法,否则会出现问题
]]
self:scheduleUpdateWithPriorityLua(frameUpdate, 0)
2. 定时器刷新
在指定的时间间隔内刷新一次或者无限次
调用方法: cc.Director:getInstance():getScheduler():scheduleScriptFunc
销毁方法: cc.Director:getInstance():getScheduler():unscheduleScriptEntry
local function timerUpdate(dt)
count1 = count1 + dt
self._states[1]:setString("定时刷新时间:" .. count1)
end
--[[
参数1:回调接口用于刷新
参数2:每次刷新的时间间隔
参数3:是否仅执行一次,false为无限次(此参数若设置为true,也就是C++中的scheduleOnce)
]]
local _schedule = cc.Director:getInstance():getScheduler()
-- 添加判定是为了避免定时器的重复定义,
if self._timerScheduler ~= nil then
_schedule:unscheduleScriptEntry(self._timerScheduler)
self._timerScheduler = nil
end
self._timerScheduler = _schedule:scheduleScriptFunc(timerUpdate, 5, false)
-- 销毁时,一定要记得定时器销毁
function test:dispose()
if self._timerScheduler then
local _schedule = cc.Director:getInstance():getScheduler()
_schedule:unscheduleScriptEntry(self._timerScheduler)
self._timerScheduler = nil
end
-- do other something
end
End