Сначала попытался сделать вот так:
let lastDate = new Date();
function lifeCycle() {
const currentTime = new Date();
const diff = currentTime.getMilliseconds() - lastDate.getMilliseconds();
deltaTime = diff / 100;
lastDate = currentTime;
handleControls();
renderScene();
window.requestAnimationFrame(lifeCycle);
}
window.requestAnimationFrame(lifeCycle);
Но происходит какая-то странная фигня. Камера прыгает туда-сюда Потом я заметил, что deltaTime
иногда становится отрицательным По-этому, добавил:
if (diff > 0) { //магия вне Хогвардса
deltaTime = diff / 100;
}
Всё заработало. Потом вывел в консоль значение diff
и оказалось, что оно циклически плавает от ~-500
до ~+500
Это почему вообще?
Начал гуглить и нашёл нормальный способ:
let then = 0;
function render(now) {
now *= 0.001; // convert to seconds
const deltaTime = now - then; // compute time since last frame
then = now; // remember time for next frame
const fps = 1 / deltaTime; // compute frames per second
console.log(fps); // update fps display
requestAnimationFrame(render);
}
requestAnimationFrame(render);
Проверил - работает. Только непонятно, откуда берётся переменная now
и почему она увеличивается с каждой итерацией?