По умолчанию, я думаю, что это хорошо, чтобы ограничить частоту кадров до 60 Гц, так как:
• Высокая частота кадров, тем больше тепла, поэтому (процессор) шум вентилятора будет раздражать.
• Для большинства игр никто не заметит.
• это легко сделать.
• Для тех, кто имеет экологические проблемы, высокие частоты fps потребляют больше энергии (==> больше CO2).
О визуальном интересе 120 Гц:
Для 2D-игр, где на каждом кадре фактически изменяется только небольшое количество экрана, это мало чем интересует.
Для 3D-игр, особенно ориентированных на реалистичность, использование 120 Гц позволяет получить более «кинематографический» опыт.
Почему?
==> Большинство 3D-рендерингов визуализируют сцену в точке во времени, так что вы видите последовательность «совершенных» неподвижных изображений.
С другой стороны, настоящая камера будет, как человеческий глаз, оставаться открытой в течение нескольких миллисекунд, поэтому движения, происходящие в это время, оставят след на изображении, обеспечивая более верный жизненный опыт.
Граница 60 Гц достаточно, чтобы обмануть глаз вокруг движения, так что приносит 120 Гц + экран, так что экран настолько быстр, что не может следовать за ним, и у вас снова есть эффект камеры/глазного следа.
код выглядит следующим образом:
var minFrame = 13;
var maxFrame = 19;
var typicalFrame = 16;
var gameTime = 0;
var lastDrawTime = -1;
animate(drawTime) {
requestAnimationFrame(animate);
var dt = drawTime - lastDrawTime;
lastDrawTime = drawTime ;
if (dt<minFrame) return;
if (dt>maxFrame) dt=typicalFrame; // in case of a tab-out
gameTime+=dt;
// ...
}
function lauchAnimation() {
requestAnimationFrame (function(t) { lastDrawTime = t;
requestAnimationFrame(animate); });
}
RQ1: Когда вы ограничиваете кадров в секунду, вы должны позаботиться о том, что частота кадров не стабильной на всех в браузере.
Таким образом, даже приложением, ничего не выполняющим, на экране 60 Гц, имеет длительность кадра, которая может идти от 14 мс до 19 мс. (!!!!) Поэтому вы должны взять некоторый запас при ограничении частоты кадров до некоторого значения.
Rq2: В приведенном выше примере «TypicalFrame» заменяется собственной частотой кадров экрана (которую вы должны вычислить самостоятельно).
Ну, если в этих обратных вызовах много вещей, то следующий кадр анимации обязательно будет задерживаться. «Рамка анимации» не привязана к частоте обновления экрана! – Bergi
Спасибо за комментарий! Есть ли у вас какие-либо ссылки? – YemSalat
Нет, и на самом деле я мог быть неверным (см. Цитату из ответа Клыда). Браузер умный и пытается синхронизировать частоту кадров (обратный вызов фрейма анимации анимации + reflow + redraw), при этом экран обновляется для плавного воспроизведения. Тем не менее, он будет автоматически дросселировать его, когда есть (слишком) много js работает на каждый кадр, батарея работает на низком уровне, вкладка не отображается и т. Д. – Bergi