У меня есть функция, которая вычисляет следующий кадр в анимации различных объектов, движущихся по осям X и Y [я называю это frameRender()
], и функция, которая применяет этот результирующий кадр к объектам [я называю это frameDisplay()
]. Объекты не просто перемещаются из точки A в B, они постоянно перемещаются, всегда получая новые целевые координаты. Я использую setInterval()
с интервалом 1000/frameRate
, но это, похоже, совсем не работает, так как браузеры не имеют точного времени.
Вопрос: как я могу убедиться, что анимация имеет постоянную частоту кадров и будет работать с одинаковой скоростью во всех браузерах, во всех системах? Я перепробовал все и не могу получить точный результат даже на разных браузерах (я тестирую на Firefox и Chrome, Chrome обычно показывает намного быстрее).
Результат должен быть следующим: при медленном воспроизведении интервал анимации должен сначала уменьшиться, а затем попытаться пропустить некоторые кадры [пропуская frameDisplay()
], если DOM отображает медленно, до тех пор, пока он не будет воспроизводиться правильно. Когда он воспроизводится быстро, интервал анимации должен увеличиваться, чтобы анимация воспроизводилась с правильной скоростью.
Но как вы сохраняете последовательность во всем этом, поскольку вы не всегда можете быть уверены, когда браузеры станут медленными или когда они будут работать быстро. Например, если есть огромный всплеск движений, и мы уменьшаем интервал, чтобы поддерживать постоянную частоту кадров, а затем внезапно большинство движущихся объектов останавливаются или не двигаются много, это внезапно будет работать очень быстро!
Есть идеи?