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僅僅執行一次后就被移除了。
然后調用了我們需要在未來某個時刻需要調用執行的函數。