2013-08-25 2 views
1

Я пытаюсь сделать таймер в JavaScript для анимации в WebGL. Это код, который получает прошедшее время с использованием класса Date.Не удается получить правильное время, прошедшее

var lastTime = Date.now(); 
var elapsed = 0; 
var timeNow = Date.now(); 
function animate() { 
    timeNow = Date.now(); 
    if(timeNow > lastTime) { 
     elapsed = timeNow - lastTime; 
     console.log(elapsed); 
    } 

    lastTime = timeNow; 
} 

Анимация вызывается из окна обратного вызова window.requestAnimationFrame(). Но это, кажется, порождает ценность между 16 и 17. Это никогда не превышает 20. Что происходит?

EDIT: На самом деле это был мой дерп. Истекший должен быть + = not =. Спасибо Аннотация Алгоритм объяснения, почему он был между 16 и 17. :)

ответ

1

Вы звоните animate 60 раз в секунду, потому что это, вероятно, то, что вы установили в requestAnimationFrame (и устанавливается по умолчанию). 1000 мс/60 кадров = 16.xx мс. Так анимация называется каждые ~ 16 мс, и это то, что вы получаете.

if (!window.requestAnimationFrame) { 

window.requestAnimationFrame = (function() { 

    return window.webkitRequestAnimationFrame || 
    window.mozRequestAnimationFrame || 
    window.oRequestAnimationFrame || 
    window.msRequestAnimationFrame || 
    function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) { 

     window.setTimeout(callback, 1000/60); // so call it every ~16ms 

    }; 

})(); 

}

+0

Отредактированный ответ. Вы можете увидеть, как изменить 'requestAnimFrame'. Эта функция широко используется для анимации, а 60 кадров в секунду - «стандартная». –

+0

Хорошо, это имеет смысл. Но я хочу, чтобы общее время прошло. – Jadar

+0

Ой, вау, эх, неважно. Я забыл + = по истекшему = timeNow - lastTime; – Jadar

Смежные вопросы