Задать вопрос
goodwin74
@goodwin74

Как можно оптимизировать в JS покадровую анимацию на Canvas?

Есть JS скрипт, где есть массив из Image объектов уже загруженных (фреймы анимации PNG формата), и есть canvas.
Так же есть функция которая очищает canvas (clearRect) и потом при помощи drawImage рисует следующий кадр из массива.
Проблема в том, что если взять два (или более) канваса с покадровой анимацией и проигрывать их одновременно, начинаются сильные просадки FPS.
Есть ли какие нибудь пути оптимизации такой анимации, чтобы они тратили меньше ресурсов и соответственно кадры рисовались быстрее.
  • Вопрос задан
  • 364 просмотра
Подписаться 2 Средний 12 комментариев
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
я бы использовал не setTimeout(), a именно requestAnimationFrame()
Внутри известно прошедшее время и можно понять, какой кадр сейчас должен отображаться.

Надо запоминать, какой кадр сейчас отображён: надо ли его перерисовывать, или requestAnimationFrame() успел сработать дважды во время одного кадра и перерисовки не требуется.

Так анимации будут жестко привязаны ко времени. Даже если из-за низкой производительности какой-то кадр окажется пропущен, общая скорость анимаций привязана ко времени, и рассинхрона не возникнет.
Вместо «торможения», замедления — могут проглатываться кадры. Но скорость движения персонажа в анимации останется прежней, хоть и менее плавной.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы