Сначала попытался сделать вот так:
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 и почему она увеличивается с каждой итерацией? ![]()