引擎shedule是否有bug,或者是故意为之?

image
上面是官方的实现。看了2.x和3.x的代码都是一样的。

如果我写一个this.schedule(()=>{}, 0.035),的定时器,实测发现,每次定时器都是时隔0.05秒执行。按照60的帧率,每帧0.016秒,刚好3帧的时间0.048秒,this._elapsed 才会大于0.035秒。

image
我的疑问是,这里的this._elapsed为什么要置0,不应该是this._elapsed -= this._delay吗??

定时器间隔设置为0.035的情况下,我预想的60帧执行情况,:
0.016 this._elapsed = 0.016
0.016 this._elapsed = 0.032
0.016 this._elapsed = 0.048 - 0.035 = 0.013 定时器执行一次
0.016 this._elapsed = 0.029
0.016 this._elapsed = 0.045 - 0.035 = 0.01 定时器执行一次
0.016 this._elapsed = 0.026
0.016 this._elapsed = 0.042 - 0.035 = 0.007 定时器执行一次

实际上引擎的执行方式却是:
0.016 this._elapsed = 0.016
0.016 this._elapsed = 0.032
0.016 this._elapsed = 0.048 定时器执行一次 然后this._elapsed = 0 置0
0.016 this._elapsed = 0.016
0.016 this._elapsed = 0.032
0.016 this._elapsed = 0.048 定时器执行一次,然后this._elapsed = 0 置0
0.016 this._elapsed = 0.016
0.016 this._elapsed = 0.032
0.016 this._elapsed = 0.048 定时器执行一次,然后this._elapsed = 0 置0

当我改用setInterval来实现的时候,运行情况是跟我预想的差不多的。