quick-cocos-2dx学习之【scheduler.lua】

 1 local scheduler = {}
 2 
 3 local sharedScheduler = CCDirector:sharedDirector():getScheduler()
 4 
 5 function scheduler.scheduleUpdateGlobal(listener)
 6     --参数listener是需要定时执行的函数,interval这里是0(每帧执行listener)
 7     --第三个参数false,表示不暂停schedule,如果为true,schedule没有启动
 8     return sharedScheduler:scheduleScriptFunc(listener, 0, false)
 9 end
10 
11 function scheduler.scheduleGlobal(listener, interval)
12     --跟上面差不多,只是它不是每帧执行,而是有一个interval间隔执行schedule
13     return sharedScheduler:scheduleScriptFunc(listener, interval, false)
14 end
15 
16 function scheduler.unscheduleGlobal(handle)
17     --取消schedule,参数handle是我们scheduleScriptFunc的返回值
18     sharedScheduler:unscheduleScriptEntry(handle)
19 end
20 
21 function scheduler.performWithDelayGlobal(listener, time)
22     --[[延时执行,首先是延时time秒的时间,然后调用unschedule函数,
23     取消卸载掉自身schedule,然后执行一个我们希望延时的函数]]--
24     local handle
25     handle = sharedScheduler:scheduleScriptFunc(
26     function()
27         scheduler.unscheduleGlobal(handle)
28         listener()
29     end, time, false)
30     return handle
31 end
32 
33 return scheduler

schedule的使用地方是很多的,一个游戏不可能缺少了schedule这样的组件。

performWithDelay()的实现是值得借鉴的。

如何通过schedule对未来某个时间需要执行的函数进行一次调用。

首先是启动schedule本身,然后设置schedule的循环间隔interval时间为time,在schedule第一次经过time秒后执行回调函数,

释放掉schedule定时器,这样就可以让循环往复执行的schedule仅仅执行一次后就被移除了。

然后调用了我们需要在未来某个时刻需要调用执行的函数。

原文地址:https://www.cnblogs.com/vokie/p/3657069.html