下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

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

作者:课课家教育     来源: http://www.kokojia.com点击数:1073发布时间: 2019-03-22 14:10:00

标签: Cocos2D-JSCocos2D-JS技巧Cocos2D-JS教程

  估计很多初学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次的误差。

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

  输出:

赞(16)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程