Qicklua 定时器

来源:互联网 发布:阿里云 域名交易 编辑:程序博客网 时间:2024/06/18 14:09

计时器,就是让系统每隔一段时间调用我们的函数,来处理一些事情,比如飞机战斗游戏中,子弹与敌机之间的碰撞,系统每一帧调用检测函数,检测两者是否碰撞。


quick里面帮我们把cocos2dx lua提供的scheduler封装到了framework里面的scheduler.lua文件里面。

注意:计时器模块在初始化中不会自动载入,所以我们得手动获得这个模块

[html] view plain copy
  1. local scheduler = require(cc.PACKAGE_NAME .. ".scheduler")  
PACKAGE_NAME这个是framework文件夹的别名

我们来看第一个函数

[html] view plain copy
  1. scheduler.scheduleUpdateGlobal()  
  2.   
  3. scheduler.scheduleUpdateGlobal(listener)  
  4. 计划一个全局帧事件回调,并返回该计划的句柄。  
  5. 全局帧事件在任何场景中都会执行,因此可以在整个应用程序范围内实现较为精确的全局计时器。  
  6. 该函数返回的句柄用作 scheduler.unscheduleGlobal() 的参数,可以取消指定的计划。  
  7. Parameters  
  8.   
  9. function 回调函数  
[html] view plain copy
  1. Returns  
  2.   
  3. mixed schedule句柄  

根据这个写个代码实验一下

[html] view plain copy
  1. function MyScene:ctor()  
  2.   
  3.     MyScene.handler_ =  scheduler.scheduleUpdateGlobal(function()   
  4.         print("全局帧事件计时器。。。。。")   
  5.     end)  
  6.   
  7.     local button = cc.ui.UIPushButton.new({  
  8.         normal = "Button01.png",pressed = "Button01Pressed.png"},  
  9.         {scale9true})  
  10.     button:align(display.CENTER,display.cx,display.cy)  
  11.     button:setButtonSize(200, 100)  
  12.     button:addTo(self)  
  13.   
  14.     button:onButtonClicked(function()  
  15.         scheduler.unscheduleGlobal(MyScene.handler_)  
  16.         print("停止全局帧事件计时器")  
  17.         end)  
  18.   
  19. end  
运行一下,我们会看到很快的不停得输出
[html] view plain copy
  1. 全局帧事件计时器。。。。。  
[html] view plain copy
  1.   
点击按钮,就停止计时器了,这就是系统画面每帧会调用


但是我不想这么快执行回调函数,还有什么方法呢?

系统提供了,每隔一段时间调用一下回调函数

[html] view plain copy
  1. local function schedulerFunction(dt)  
  2.     print("每隔2s中调用一次我",os.clock())  
  3. end  
  4.   
  5. function MyScene:ctor()  
  6.   
  7.       
  8.     MyScene.handler_ = scheduler.scheduleGlobal(schedulerFunction, 2.0)  
  9.   
  10.     local button = cc.ui.UIPushButton.new({  
  11.         normal = "Button01.png",pressed = "Button01Pressed.png"},  
  12.         {scale9true})  
  13.     button:align(display.CENTER,display.cx,display.cy)  
  14.     button:setButtonSize(200, 100)  
  15.     button:addTo(self)  
  16.   
  17.     button:onButtonClicked(function()  
  18.         scheduler.unscheduleGlobal(MyScene.handler_)  
  19.         print("停止全局事件计时器")  
  20.         end)  
  21. end  

运行查看控制台输出


最后一个函数,就是全局值运行一次的计时器,你将你只想运行一次的函数放入这里运行即可

[html] view plain copy
  1. local function schedulerFunction(dt)  
  2.     print("小明,吃晚饭了,不要玩游戏了")  
  3. end  
  4.   
  5. function MyScene:ctor()  
  6.   
  7.       
  8.     MyScene.handler_ = scheduler.scheduleGlobal(schedulerFunction, 1.5)  
  9.       
  10.     scheduler.performWithDelayGlobal(function()  
  11.     print("我吃过了,你们吃吧")  
  12.     scheduler.unscheduleGlobal(MyScene.handler_) end, 6)  
  13.   
  14. end  



很简单,但是很强大,就看你怎么使用了!!!

0 0
原创粉丝点击