Я написал очень простые игровые руководства, в которых используется простой игровой цикл requestAnimationFrame. Им не нужно отслеживать прошедшее время или частоту кадров:
var canvas = document.querySelector("#canvas");
var ctx = canvas.getContext("2d");
function gameLoop() {
ctx.clearRect(0,0,canvas.width,canvas.height);
//Drawing, etc.
var myRAF = requestAnimationFrame(gameLoop);
}
gameLoop();
Теперь я хочу научиться анимировать такие вещи, как циклы ходьбы, из таблицы спрайтов, а не только анимировать движение статического объекта. Я считаю, что для этого необходимо сначала изучить, как отслеживать, сколько времени понадобилось для рендеринга фрейма или на каком фрейме вы находитесь. У меня сложилось впечатление, что в этом нет необходимости, если вы используете RAF вместо setInterval или setTimeout (упс!). Я видел, как люди используют объект Date, метку времени requestAnimationFrame и performance.now, хотя я пока не понимаю код. Каков наилучший выбор для разработки игр с requestAnimationFrame, если мои цели состоят в том, чтобы анимировать из спрайтов и обеспечить, чтобы движение в игре было с одинаковой скоростью, независимо от того, сколько кадров в секунду набирает тот или иной игрок? Я читал, что вам нужно умножить все скорости в игре на фактор времени, но не знаю как. В противном случае медленный компьютер, который получает только 30 кадров в секунду, проходит через игру и стреляет пулями с половинной скоростью по сравнению с быстрыми машинами, получающими скорость около 60 кадров в секунду, верно?
Пожалуйста, покажите мне, как бы я реализовал код отслеживания времени / кадра вигровой цикл, в дополнение к плюсам и минусам различных способов достижения этой цели.
С риском звучать так, будто я хочу обучающую программу, пожалуйста, проигнорируйте следующую часть из исходного вопроса