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仅仅执行一次后就被移除了。
然后调用了我们需要在未来某个时刻需要调用执行的函数。