cocos2dx调度器schedule

                                  cocos2dx调度器schedule

 Cocos2d-Lua 引擎中的调度器是用来周期执行某个函数或延时执行某个函数的。功能类似于定时触发器,但它又与游戏紧密结合。

schedule调度器利用了timer类来保存了调度任务的 时间线,重复次数,事件间隔,延迟等数据。timer把相关信息以结构体的形式存进了双向链表_hashForTimers

每帧更新后Timer做事件累加,根据时间线去触发或者取消更新回调。

每帧更新每帧更新的回调放在 _hashForUpdates结构中以target作为key,同时根据优先级放在不同的hash表中。

自定义更新更新回调放在_hashForTimers hash表中,以target作为key.

每帧开始绘制之前执行Scheduler::update(float dt)

在里面遍历hash表,执行update更新回调,完成后移出。

按照优先级<0 ==0 >0 自定义更新的顺序遍历执行。

 

使用方法:Cocos2d-Lua 中的调度器分两种:全局调度器和节点调度器

全局调度器模块提供了三种调度器以满足各种需求:

(1)全局帧调度器: schduleUpdateGlobal(listener)

 顾名思义,全局帧调度器是游戏的每一帧都会触发的调度器。主要是在碰撞检测等每一帧都需要计算的地方。全局帧调度器不依赖任何场景,因此可以在整个游戏范围内实现较为精确的全局计时。


示例代码:

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

local function onInterval(dt)

print("update")

end

scheduler.scheduleUpdateGlobal(onInterval)

回调函数onInterval的参数dt,是两次调度之间的时间间隔。

(2)全局自定义调度器:schduleGlobal(listener,interval)

全局帧调度器是全局自定义调度器的特例,自定义调度器可以指定调度时间,提供更高的灵活性

由于引擎的调度机制,自定义时间间隔必须大于两帧的间隔,否则两帧内的多次调用会被合并成一次调用。所以自定义时间间隔应在1/60s以上(引擎默认每秒刷新60帧)

示例代码:

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

local function onInterval(dt)

print("Custom")

end

scheduler.scheduleGlobal(onInterval,0.5)

每隔0.5秒控制台输出信息。

(3)全局延时调度器:performWithDelayGlobal(listener,time)

 若在游戏中某些场合,只想实现一个单次的延时调用,就需要延迟调度器。scheduler.performWithDelayGlobal()会在等待指定时间后执行一次回调函数,然后自动取消该scheduler。

示例代码:

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

local function onInterval(dt)

print("once")

end

scheduler.performWithDelayGlobal(onInterval,0.5)

在控制台只会看到一次输出。

节点调度器

Node是Cocos2d-Lua引擎中的基础类,它封装了很多基础方法与属性,其中调度器就是Node提供的方法之一。Node中的调度器只能在Node中使用,Node负责管理调度器的生命周期,当Node销毁的时候,会自动注销节点名下的所有调度器

1、节点自定义调度器

由于引擎的调度机制,自定义时间间隔必须大于两帧的间隔,否则两帧内的多次调用会被合并成一次调用。所以自定义时间间隔应在0.1s以上(引擎默认每秒刷新60帧)

节点自定义调度器示例代码:

self:schdule(function() print ("schdule") end,1.0)

可以在Scene或Layer中调用上面的代码。

2、节点延时调度器

延时调度器等待指定的时间后执行一次回调函数,示例代码:

self:performWithDelay(function() print("performWithDelay") end , 1.0)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lampard杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值