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

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

Есть JS скрипт, где есть массив из Image объектов уже загруженных (фреймы анимации PNG формата), и есть canvas.
Так же есть функция которая очищает canvas (clearRect) и потом при помощи drawImage рисует следующий кадр из массива.
Проблема в том, что если взять два (или более) канваса с покадровой анимацией и проигрывать их одновременно, начинаются сильные просадки FPS.
Есть ли какие нибудь пути оптимизации такой анимации, чтобы они тратили меньше ресурсов и соответственно кадры рисовались быстрее.
  • Вопрос задан
  • 396 просмотров
Подписаться 2 Средний 12 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по тестированию + ИИ
    6 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
я бы использовал не setTimeout(), a именно requestAnimationFrame()
Внутри известно прошедшее время и можно понять, какой кадр сейчас должен отображаться.

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

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

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

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