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

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

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

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

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

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

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