Quick cocos2dx-Lua中计时器(scheduler)

本文介绍了在Quick Cocos2d-x Lua中如何使用计时器,计时器用于周期性调用函数处理特定任务,如游戏中的碰撞检测。在`scheduler.lua`中封装了Cocos2d-x Lua的scheduler功能,需要注意手动引入计时器模块。通过示例代码展示了定时器的使用方法,包括间隔调用和只运行一次的计时器,强调了其灵活性和实用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

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("停止全局事件<a target=_blank href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=b995c84a892fcf1c&k=%BC%C6%CA%B1%C6%F7&k0=%BC%C6%CA%B1%C6%F7&kdi0=0&luki=1&mcpm=0&n=10&p=baidu&q=65035100_cpr&rb=0&rs=1&seller_id=1&sid=1ccf2f894ac895b9&ssp2=1&stid=9&t=tpclicked3_hc&td=1836545&tu=u1836545&u=http%3A%2F%2Fwww%2Ebubuko%2Ecom%2Finfodetail%2D571414%2Ehtml&urlid=0" target="_blank" oa="1" rel="noreferrer" data-tag="1" style="padding: 0px; color: rgb(51, 136, 255); text-decoration: none;">计时器</a>")
		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

  


技术分享

 


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值