最佳答案
JavaScript 中有没有使用 date 对象以毫秒为单位获取时间的替代方法,或者至少有一种重用该对象的方法,而不必在每次需要获取这个值时实例化一个新对象?我这样问是因为我正在尝试用 JavaScript 制作一个简单的游戏引擎,当计算“ delta 帧时间”时,我必须每帧创建一个新的 Date 对象。虽然我不太担心这样做的性能影响,但是我对这个对象返回的确切时间的可靠性有一些问题。
每隔一秒左右,我就会在动画中看到一些奇怪的“跳跃”,我不确定这是否与 JavaScript 的垃圾收集有关,或者是因为 Date 对象在更新速度如此之快时受到了限制。如果我将 delta 值设置为某个常数,那么动画就会非常平滑,所以我相当肯定这个“跳跃”与我得到时间的方式有关。
我能给出的唯一相关代码是我计算增量时间的方法:
prevTime = curTime;
curTime = (new Date()).getTime();
deltaTime = curTime - prevTime;
在计算移动/动画时,我将一个常量值与增量时间相乘。
如果没有办法通过使用 Date 对象来避免以毫秒为单位的时间,那么增加一个变量(即自游戏开始以来以毫秒为单位的运行时间)并且以每毫秒一次的速度使用 SetTimer 函数来调用的函数是否是一个有效和可靠的替代方案呢?
编辑: 我现在已经在不同的浏览器中测试了我的代码,看起来这种“跳跃”只在 Chrome 中表现得很明显,而不是在 Firefox 中。但是,如果有一种方法可以同时在两种浏览器中工作,那就更好了。