pixijs / tilemap

Rectangular tilemap implementation for PixiJS
https://pixijs.io/tilemap/docs/
MIT License
290 stars 55 forks source link

id for tile #119

Closed nik0145 closed 3 years ago

nik0145 commented 3 years ago

I use pixi-viewport and pixi-tilemap in my game. How can i set identifier for tile ?

ivanpopelyshev commented 3 years ago

Please explain more

nik0145 commented 3 years ago

Если не возражаешь на русском мне будет проще объяснить (если будет нужно переведу) Я использвую viewport и tilemap и хочу по клику получить id тайла. в tilemap не реализовано клик по тайлам, но как я понял можно containsPoint расписать для этого. Но у viewport есть клик и т.к. он контейнер для карты то x y он получает верные и containsPoint не нужен. Теперь когда я кликаю на тайл мне нужно получить информацию об этом тайле возможно его тип id или что нибудь еще. Могу я как то на этапе отрисовки тайлов поставить им id ? Возможно мне нужно переопределить метод tile. Мой вопрос похож на этот https://www.html5gamedevs.com/topic/33706-pixisprite-on-click-weird-isssue/, только как вы и посоветовали я использую tilemap для этого.

ivanpopelyshev commented 3 years ago

containsPoint просто проверяет все тайлы на пересечение. Можешь написать метод который будет выдавать UV конкретного тайла, к сожалению айдишника там нету, сейчас объясню почему:

обычно люди хранят тайлы где-то у себя в двумерном массиве. Алгоритм высокого уровня, будь то чанки или окошко, передает это в tilemap двумя форами. Без отделения логики от графики там много что может пойти плохо, и если я дам людям какие-то высокоуровневые функции они начнут просить больше и будут лажать, поскольку эта часть всем нужна разная.

Если знаешь координаты, то по ним можешь определить где эта штука у тебя в массиве.

ivanpopelyshev commented 3 years ago

Грубо говоря, @pixi/tilemap это только одна половина тайлмапы, универсальная низкоуровневая. Вторую, высокоуровневую, все пишут сами.

nik0145 commented 3 years ago

ну да я использую tilemap чтобы отрисовать первый слой карты который не меняется на протяжении игры. У меня логика такая, чтобы получить информацию о втором слое карты мне нужно знать id тайла первого слоя. у меня массив 15к айтемов и по нему искать преобразованные пиксели в координаты в этом массиве думаю будет непроизводительно и нецелесообразно. Чтобы отрисовать вторую, высокоуровневую стоит лучше использовать обычные спрайты?

ivanpopelyshev commented 3 years ago

Высокоуровневая в смысле кода а не которая выше первой на экране.

Например:

Высокий уровень: если камера вышла за некоторое окошко - делаем новое окошко чуть больше камеры (раза в полтора), и проходимся двойным FOR-ом чтобы "нарисовать" тайлмапу (на самом деле сгенерить новые визуальные тайлы) Низкий уровень : pixi-tilemap или PIXI.Graphics.beginTextureFill

Если у тебя в логическом представлении карты неупорядоченный массив а не чанки или какое-нибудь quad-tree - ну поздравляю, в pixi-tilemap тоже массив и ничего она тебе быстрее не сделает :)

nik0145 commented 3 years ago

Ничего не понятно, но очень интересно :) мне как раз нужно понять как накодить высокоуровневую тайлмапу, но проблема в том, что я могу получать информацию если знаю id тайла, но мне нужно будет чтото придумать чтобы его получить не привязывая при отрисовки его. На вопрос ты ответил так что можно дальше пытаться и закрывать issue. Спасибо!