Независимость Δt движков от FPS
Описание
Сделал две движки разных скоростей и точности. Вот основная их рабочая часть:
1.
let previous = 0;
const callback = (current) => {
const difference = current - previous;
if (this.launched) {
this.#FPS = (1000 / difference);
this.dispatchEvent(new Event(`update`));
}
previous = current;
requestAnimationFrame(callback);
};
requestAnimationFrame(callback);
let previous = performance.now();
const callback = (current) => {
const difference = current - previous;
if (this.launched) {
this.#FPS = (1000 / difference);
this.dispatchEvent(new Event(`update`));
}
previous = current;
setTimeout(callback, this.#gap, performance.now());
};
setTimeout(callback, this.#gap, performance.now());
Они отлично работают, но основная проблема у обоих то, что Δt (разница времени между кадров) рассчитывается от FPS (количество кадров в секунду). А если программа лагает, то и FPS падает, соответственно и Δt прыгает вверх.
И вся физика, которая считается от Δt, начинает демонстрировать невероятное шоу.
Вопрос
Возможно ли создать движок, рассчитывающий разницу времени статически, даже при лагах?
Если да, то как?