自定义定时器的实现

Cocos2d-x自带的定时器

引擎自带的定时器主要有两种接口:

  • 每帧调用
--参数是调用函数和优先级
void scheduleUpdateWithPriorityLua (int nHandler, int priority)  
  • 指定时间回调
--参数一:刷新函数
--参数二:每次刷新的时间间隔
--参数三:是否只执行一次。false为无限次。
void scheduleScriptFunc((update, inteval, false))

无论是哪种定时器,最后都要使用scheduler.unscheduleGlobal(timer)停止掉。参数是上两个函数的返回值。

问题

  • 游戏中有大量的指定时间定时器,用scheduleScriptFunc创建过多的话,太费性能。
  • 一些定时器要延时执行,Cocos2d-x没有直接提供这种接口。

解决方案

不难发现,scheduleScriptFunc只是在不断执行update函数,而inteval可以自定义,这样就可以用一个Cocos2d-x的定时器实现多个定时需求。

实现自己的定时器

  • 设计定时器,提供构造、执行回调、读取外部延时和间隔信息对外接口,生成定时器对象的时候计算下次执行时间。

  • 移出的定时器id可以用额外一个表记录,赋给新的定时器,重复利用table空间。

源码地址

https://gitee.com/cool-night/quick-cocos2d-x

优化点

间隔1s的定时器和间隔1天的定时器的scheduleScriptFunc的inteval参数一样,这显然是很不合理的,在下个版本将对定时器进行分类。

你可能感兴趣的:(自定义定时器的实现)