美文网首页
自定义定时器的实现

自定义定时器的实现

作者: 凉夜lrs | 来源:发表于2021-04-05 21:36 被阅读0次

    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参数一样,这显然是很不合理的,在下个版本将对定时器进行分类。

    相关文章

      网友评论

          本文标题:自定义定时器的实现

          本文链接:https://www.haomeiwen.com/subject/iufjkltx.html