.getTime()是如何工作的?

时间:2017-05-18 17:45:41

标签: javascript loops frame-rate

为什么这个陈述有效?我试图以每秒20-25帧的速度更新我的屏幕。我明白为什么这样做我只是不明白它是如何工作的。如果我们采用新的Date()。getTime() - lastLoopRun,为什么每次结果都不为零,因为lastLoopRun等于new Date()。getTime()?我知道它与变量从0开始这一事实有关,但对我来说没有多大意义。

var lastLoopRun = 0;
function loop() {
        if (new Date().getTime() - lastLoopRun > 40) {
            handleControls(); 
            showSPrites();

            lastLoopRun = new Date().getTime();
        }
        setTimeout('loop();', 2);
    }

2 个答案:

答案 0 :(得分:0)

选中lastLoopRun时,它尚未更新到当前时间。

因此,在循环开始时,它仍然具有前一个循环的旧值,或者为0.

如果它在循环开始时更新,它就像你说的那样总是0。

答案 1 :(得分:0)

new Date().getTime()返回1970年1月1日00:00:00 UTC与当前时间之间经过的毫秒数。所以它每1秒增加1000点。

function loop() { ...; setTimeout('loop();', 2);}每2毫秒调用loop()

   loop() -> elapsed about 40 ms after previous action? -> after 2 ms 
-> loop() -> elapsed about 40 ms after previous action? -> after 2 ms 
-> loop() -> elapsed about 40 ms after previous action? -> after 2 ms 
-> loop() -> OK! elapsed -> do action -> update timestamp -> after 2 ms
-> loop() -> elapsed about 40 ms after previous action? -> after 2 ms 
-> ...