Как оптимально отрисовывать игровую графику на html canvas?

Я использую для отрисовки игрового мира с top-down камерой 4 слоя canvas (статика, анимированные/игровые обьекты, персонажи, деревья и крыши (все, у чего z-index больше чем у персонажей). Размер одной локации - 2880х1600, размер каждого canvas соответствует локации. Перерисовываю только "грязные" области. Правда нет единого диспетчера отрисовок, у каждого обьекта свой обработчик.

Суть проблемы - во время передвижения камеры (путем смещения координат canvas-ов) производительность катастрофически падает, из-за чего на слабых машинах движение происходит рывками. При этом отрисовка анимации без перемещения камеры происходит вполне адекватно. Как лучше переработаь архитектуру, чтобы снизить нагрузку?

Посмотреть описанную ситуацию вживую можно тут
  • Вопрос задан
  • 522 просмотра
Решения вопроса 1
Думаю, что CSS transform: translate() будет работать немного быстрее, это раз.
Можно переставать рисовать во время перемещения, это 2.
Можно попробовать отключить pointer-events в css.
Но главный момент - чем больше локация, тем больше будет фризов, от этого никуда не убежать, пока не начать рисовать на canvas в размер экрана, (время доступа к бОльшим ресурсам всегда больше). Как перерисовать тайловую карту быстро сохраняя плавное перемещение карты? Можно глянуть на реализацию яндекс-карт, там карта рисуется чуть больше экрана на величину тайла, плавно сдвигается трансформацией и рисуется лишь новый край при смещении более чем на 1 тайл. В профиле есть, почта, пиши, могу разъяснить чуть подробнее.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
19 апр. 2024, в 23:00
5000 руб./за проект
19 апр. 2024, в 20:43
20000 руб./за проект