Тайловые карты представляют собой сетку повторяющихся графических
элементов (тайлов), которые образуют игровой мир. В Phaser работа с
тайловыми картами реализуется через класс Tilemap и
связанные объекты, такие как Tileset и
TilemapLayer. Тайловая карта обычно создаётся на основе
JSON-файла, экспортированного из редактора карт, например
Tiled.
Формат JSON описывает расположение тайлов, их размеры, слои и
свойства. В Phaser карта загружается и обрабатывается с помощью
встроенного менеджера ресурсов this.load внутри сцены.
Тайловое изображение содержит все тайлы карты в одном спрайтшите. Размеры каждого тайла должны точно соответствовать настройкам карты.
this.load.image('tiles', 'assets/tiles.png');
'tiles' — ключ ресурса, который используется при
создании карты.'assets/tiles.png' — путь к изображению с тайлами.this.load.tilemapTiledJSON('map', 'assets/map.json');
'map' — ключ карты.'assets/map.json' — путь к JSON-файлу,
экспортированному из Tiled.Важно, чтобы карта и тайловое изображение совпадали по настройкам размеров тайлов.
После загрузки ресурсов создаётся объект Tilemap:
const map = this.make.tilemap({ key: 'map' });
Параметр key указывает на ранее загруженный JSON. Этот
объект содержит информацию о слоях, тайлах и свойствах карты.
Чтобы карта отображалась, нужно создать объект Tileset,
который связывает тайлы в карте с конкретным изображением:
const tileset = map.addTilesetImage('tileset_name_in_tiled', 'tiles');
'tileset_name_in_tiled' — название набора тайлов в
редакторе Tiled.'tiles' — ключ загруженного изображения тайлов.Это позволяет Phaser корректно сопоставлять индексы тайлов в JSON с графикой.
Карты могут содержать несколько слоёв. Для отображения слоев
используется createLayer:
const groundLayer = map.createLayer('Ground', tileset, 0, 0);
const objectLayer = map.createLayer('Objects', tileset, 0, 0);
'Ground' и 'Objects' — имена слоёв,
указанные в Tiled.tileset — объект Tileset.0, 0 — координаты размещения слоя на сцене.Слои можно настраивать отдельно: задавать коллизии, видимость, порядок отображения.
Phaser позволяет использовать тайловые карты для коллизий объектов с миром. Для этого у слоя задаются коллизируемые тайлы по индексу:
groundLayer.setCollisionByProperty({ collides: true });
collides для тайлов, с
которыми должна работать физика.Для интеграции с физикой Arcade:
this.physics.add.collider(player, groundLayer);
player — объект физического тела.groundLayer — слой карты с коллизиями.Tiled позволяет добавлять объектные слои (Object Layer)
для размещения врагов, предметов или триггеров. Объекты загружаются
через:
const objects = map.getObjectLayer('Objects')['objects'];
objects.forEach(obj => {
this.add.sprite(obj.x, obj.y, obj.name);
});
'Objects' — имя объектного слоя в Tiled.obj.x, obj.y — координаты объекта.obj.name — ключ ресурса, соответствующего объекту.Это удобно для создания динамических элементов на карте без ручного позиционирования.
Размер карты определяется количеством тайлов и их размером:
this.cameras.main.setBounds(0, 0, map.widthInPixels, map.heightInPixels);
map.widthInPixels и map.heightInPixels
автоматически рассчитываются на основе слоёв и тайлов.this.cameras.main.startFollow(player);
TilemapLayer).setAlpha и
setTint.Использование тайловых карт в Phaser обеспечивает структурированный и масштабируемый подход к созданию игровых миров, позволяет эффективно управлять визуальными элементами и взаимодействием объектов с окружением.