Quick cocos2dx-Lua(V3.3R1)学习笔记(7) ---计时器,我是个定时吃饭睡觉的好孩子
@H_301_3@计时器,就是让系统每隔一段时间调用我们的函数,来处理一些事情,比如飞机战斗游戏中,子弹与敌机之间的碰撞,系统每一帧调用检测函数,检测两者是否碰撞。
@H_301_3@
@H_301_3@quick里面帮我们把cocos2dx lua提供的scheduler封装到了framework里面的scheduler.lua文件里面。 @H_301_3@注意:计时器模块在初始化中不会自动载入,所以我们得手动获得这个模块 @H_301_3@
根据这个写个代码实验一下 @H_301_3@ @H_301_3@
@H_301_3@但是我不想这么快执行回调函数,还有什么方法呢? @H_301_3@系统提供了,每隔一段时间调用一下回调函数 @H_301_3@
运行查看控制台输出 @H_301_3@ @H_301_3@ @H_301_3@
@H_301_3@最后一个函数,就是全局值运行一次的计时器,你将你只想运行一次的函数放入这里运行即可 @H_301_3@
@H_301_3@ @H_301_3@ 很简单,但是很强大,就看你怎么使用了!!!
@H_301_3@quick里面帮我们把cocos2dx lua提供的scheduler封装到了framework里面的scheduler.lua文件里面。 @H_301_3@注意:计时器模块在初始化中不会自动载入,所以我们得手动获得这个模块 @H_301_3@
local scheduler = require(cc.PACKAGE_NAME .. ".scheduler")
PACKAGE_NAME这个是framework文件夹的别名
@H_301_3@
@H_301_3@我们来看第一个函数
@H_301_3@
scheduler.scheduleUpdateGlobal()
scheduler.scheduleUpdateGlobal(listener)
计划一个全局帧事件回调,并返回该计划的句柄。
全局帧事件在任何场景中都会执行,因此可以在整个应用程序范围内实现较为精确的全局计时器。
该函数返回的句柄用作 scheduler.unscheduleGlobal() 的参数,可以取消指定的计划。
Parameters
function 回调函数
Returns
mixed schedule句柄
根据这个写个代码实验一下 @H_301_3@ @H_301_3@
function MyScene:ctor() MyScene.handler_ = scheduler.scheduleUpdateGlobal(function() print("全局帧事件计时器。。。。。") end) local button = cc.ui.UIPushButton.new({ normal = "Button01.png",pressed = "Button01Pressed.png"},{scale9= true}) button:align(display.CENTER,display.cx,display.cy) setButtonSize(200,100) addTo(self) onButtonClicked(function() scheduler.unscheduleGlobal(MyScene.handler_) print("停止全局帧事件计时器") end) end
运行一下,我们会看到很快的不停得输出
全局帧事件计时器。。。。。点击按钮,就停止计时器了,这就是系统画面每帧会调用 @H_301_3@ @H_301_3@
@H_301_3@但是我不想这么快执行回调函数,还有什么方法呢? @H_301_3@系统提供了,每隔一段时间调用一下回调函数 @H_301_3@
local schedulerFunction(dt) print("每隔2s中调用一次我",os.clock()) end function scheduleGlobal(schedulerFunction,207)">2.0) "停止全局事件计时器") end) end
运行查看控制台输出 @H_301_3@ @H_301_3@ @H_301_3@
@H_301_3@最后一个函数,就是全局值运行一次的计时器,你将你只想运行一次的函数放入这里运行即可 @H_301_3@
"小明,吃晚饭了,不要玩游戏了") 1.5) performWithDelayGlobal"我吃过了,你们吃吧") scheduler.unscheduleGlobal(MyScene.handler_) end,207)">6) end
@H_301_3@ @H_301_3@ 很简单,但是很强大,就看你怎么使用了!!!