@durnevdanya

Как отрисовывать tilemap только один раз, а не 60 раз в секунду?

Добрый день, недавно сделал тестовый tilemap с помощью Tiled и сохранил его в формате JSON, чтобы эту карту перенести на canvas. Для этого использую эту либу. С ней загрузка карты происходит просто:
tmxJSON.load('firstTiledMap.json');

С отображением карты на канвас у меня проблем не возникло. Но проблема возникла в следующем: у меня есть функция update(), которая выполняет функции clearRect and fillRect 60 раз в секунду. То есть происходит очистка холста и перезапись. Это необходимо для игровых объектов(передвижение игрока).
При перезаписи TIlemap браузер начинает дико тормозить, что даже не закрывается вкладка.

Но ведь Tilemap статичен и ничего на нем поменяться не может, вопрос:
Как мне перерисовывать только объекты, а Tilemap не трогать?
Спасибо.
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
twobomb
@twobomb
Ну можешь один раз отрисовать тайл карту на канвас запомнить ее с помощью getimagedata и каждый раз рисовать с помощью putimagedata.
Ну а вообще у этой либы есть метод tmxJSON.drawTiles(); который отрисовывает тайл карту и если она у тебя на весь канвас то clearRect вообще не нужен так как она и так все перекрывает, (fillRect не пойму зачем вызываешь). Я попробовал у меня ничего не лагает все норм. Может ты вызываешь tmxJSON.load('firstTiledMap.json'); в методе update, ну тогда понятно почему лагает у тебя 60 раз в секунду загружает карту, (ну по крайней мере пытается ее загрузить). И еще если в геймлупе(update) используешь setTimeout или не дай бог setInerval, поменяй на requestAnimationFrame.
P.S. Один раз отрисовывать не получится, полюбому нужно перерисовывать только если не использовать два канваса наложенных друг на друга, на задней рисовать тайл, а на переднем анимации
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы