教你用Cocos2D-JS制作不变慢的定时器

    作者:课课家教育更新于: 2019-03-22 14:09:55

      估计很多初学Cocos2D-JS者在使用定时器schedule的时候没有发现它有误差,可是在游戏开发的时候没有发现这个小问题,在游戏运行的时候很可能会有无法想象的后果,接下来本教程将教大家用Cocos2D-JS制作不变慢的定时器。

      对于动画控制,可能一点误差,大家不会察觉,但如果多次循环累积或网络同步等,大家就会很清楚意识到schedule的误差问题。

      首先做一个例子证明一下:

    教你用Cocos2D-JS制作不变慢的定时器_Cocos2D-JS_Cocos2D-JS技巧_Cocos2D-JS教程_课课家

      帧频越低,变慢得越快。

      那么尝试一下解决问题?

      定时器原理:cocos2d-js底层在每一帧计算中,遍历所有定时器,看是否达到触发时间。如果达到则触发该定时器,并把时间重置为当前时间。好了,问题就在于此,“重置为当前时间”。

      看看一个新的定时器:

      这里核心是then=now-(delta%interval),每一次触发的时候,把误差算到下次触发的控制中。

      例如60fPS,那么schedule2每16ms触发一次,用户设定了100ms的interval,那么将有16*7=112>100,7帧才触发1次用户的定时器。这里累积了12ms误差,把12ms算到then中。

      那么下次将有12+16*6=108>100,只需要96ms就触发第2次用户的定时器,这次提前了4ms,弥补了第1次的误差。

      这个定时器经得起考验,即使在低帧频情况下,仍然保持稳定。

      输出:

课课家教育

未登录

1