schedule计时器精度问题求解

上传中… <!–

感谢反馈,在您发帖之前:

1)您已经对该问题进行了充分检查和试验,并且已经熟悉了 Creator 所提供的文档。您尝试搜索论坛( http://forum.cocos.com/search?q=category%3Acreator%20 ),但依然没找到答案。
2)如果问题已经确定,需要直接求助官方人员,请提供一个 demo 或者重现问题的准确环境。Demo 能够重现问题即可,不要直接发整个项目,否则您的反馈可能得不到处理。
3)如果确定有问题,并且已经提交,但是没有得到我们的解答,这很可能是我们的疏忽!请您顶帖,或者重新发起一个帖子(将上次未解答完的链接附上,我们会删除新的帖子,在旧的帖子上继续回复)。

发帖时如系统提示:“Title 无效;请描述得更详尽些”,可能是帖子的标题过长导致的,请尝试缩短一丢丢。

此外,反馈 Bug 时请您提供以下信息:
–>

  • Creator 版本:v2.0.10

  • 目标平台: web

  • 详细报错信息,包含调用堆栈:一个脚本同时开启了两个计时器,一个1s执行回调,一个0.15秒执行回调,结果0.15秒的计时器慢于1s的。理论上1分钟1s的执行60次,0.15的执行400次,结果只有376次左右。想知道这个计时器精度是怎么计算的,怎么样能让两个计时器同步

  • 重现方式:demo(485kb)

  • 出现概率:必现

用同一个定时器不就搞定了。定时器本来就不准

执行回调的时间差不同,我需要一个每隔1s执行,另一个每隔0.15s

计时器的是通过帧实现的 其逻辑执行在update中

最大公约数

schedule的原理就是在每帧判断经过的时间,某一帧的累积时间超过就执行schedule回调函数。
比如说,每一帧的时长都为16ms,schedule执行间隔为50ms,那么前3帧的时长为16 * 3 = 48ms还达不到执行需要的时间,等第四帧的时间就是16 * 4 = 64ms,这时候才会执行schedule回调,实际上这一次的schedule已经延迟了14ms。
关键在于同一个schedule多次触发回调的时间并不是相关联的,所以下一次的schedule的时间会重新计算,又会延迟14ms。
这样一来同一时间内schedule的次数越多,实际的延迟也就越高。

1赞

那有什么解决方案吗?

我说下我的方案,有2方案,1.抛弃计时器直接在update监听,依托传参。2.使用 scheduleOnce这个写多次也能解决。

用一个0.15执行定时器,每过4次执行一次1秒的方法,不就是同步的嘛

直接 update 处理,延迟的时间自己计算

schedule的执行回调的时候会回传一个时间参数的,对这个时间处理就好了