zoukankan      html  css  js  c++  java
  • Quick cocos2dx-Lua(V3.3R1)学习笔记(八) ---计时器,我是个定时吃饭睡觉的好孩子

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

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

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

    local scheduler = require(cc.PACKAGE_NAME .. ".scheduler")

    PACKAGE_NAME这个是framework文件夹的别名

    我们来看第一个函数

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


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

    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)
    	button:setButtonSize(200, 100)
    	button:addTo(self)
    
    	button:onButtonClicked(function()
    		scheduler.unscheduleGlobal(MyScene.handler_)
    		print("停止全局帧事件计时器")
    		end)
    
    end
    

      

    运行一下,我们会看到很快的不停得输出

    全局帧事件计时器。。。。。
    
    

    点击按钮,就停止计时器了,这就是系统画面每帧会调用

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

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

    local function schedulerFunction(dt)
    	print("每隔2s中调用一次我",os.clock())
    end
    
    function MyScene:ctor()
    
    	
    	MyScene.handler_ = scheduler.scheduleGlobal(schedulerFunction, 2.0)
    
    	local button = cc.ui.UIPushButton.new({
    		normal = "Button01.png",pressed = "Button01Pressed.png"},
    		{scale9= true})
    	button:align(display.CENTER,display.cx,display.cy)
    	button:setButtonSize(200, 100)
    	button:addTo(self)
    
    	button:onButtonClicked(function()
    		scheduler.unscheduleGlobal(MyScene.handler_)
    		print("停止全局事件计时器")
    		end)
    end
    

      


    运行查看控制台输出

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

    local function schedulerFunction(dt)
    	print("小明,吃晚饭了,不要玩游戏了")
    end
    
    function MyScene:ctor()
    
    	
    	MyScene.handler_ = scheduler.scheduleGlobal(schedulerFunction, 1.5)
    	
    	scheduler.performWithDelayGlobal(function()
    	print("我吃过了,你们吃吧")
    	scheduler.unscheduleGlobal(MyScene.handler_) end, 6)
    
    end
    

      



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

  • 相关阅读:
    Introduction to Oracle9i: SQL left join 和 left outer join 的区别
    ORACLE10G RMAN 命令
    Oracle管理与维护.手工创建数据库以及脚本
    RMAN 备份基本用法
    ASM 常用概念解释
    oracle学习笔记之二:数据类型之DATETIME 收藏
    10g中表监控与statistics_level
    Oracle 学习笔记: RMAN常用命令
    Oracle 进程类别
    ORACLE TRUNC()函数
  • 原文地址:https://www.cnblogs.com/luagame/p/4214328.html
Copyright © 2011-2022 走看看