В Phaser 3 тайлсеты используются для построения сложных игровых миров с помощью плиток, объединённых в карты. Основная структура работы с тайлсетами строится вокруг Tilemap и Tileset.
Создание тайлсета начинается с загрузки изображений плиток через preload:
preload() {
this.load.image('tiles', 'assets/tilesets/tiles.png');
this.load.tilemapTiledJSON('map', 'assets/maps/level1.json');
}
'tiles' — ключ для изображения тайлсета.'map' — ключ для JSON-карты, экспортированной из
редактора вроде Tiled.Далее в методе create происходит привязка тайлсета к карте:
create() {
const map = this.make.tilemap({ key: 'map' });
const tileset = map.addTilesetImage('TilesetNameInTiled', 'tiles');
const layer = map.createLayer('Tile Layer 1', tileset, 0, 0);
}
'TilesetNameInTiled' — точное имя тайлсета в редакторе
Tiled.createLayer создаёт слой, на котором плитки будут
отображаться.Слои тайлсета можно конфигурировать для взаимодействия с физикой. Для этого используется метод setCollisionByProperty или setCollisionByExclusion:
layer.setCollisionByProperty({ collides: true });
this.physics.add.collider(player, layer);
collides: true — свойство, заданное для плиток в Tiled,
определяющее, что по ним нельзя проходить.this.physics.add.collider связывает слой с объектом
игрока, обеспечивая физическое столкновение.Если необходимо исключить плитки, которые не участвуют в коллизиях:
layer.setCollisionByExclusion([-1]);
-1 обозначает пустую плитку.Phaser позволяет анимировать плитки с помощью tile animations, где одна плитка может циклично менять своё изображение. Настройка выполняется в JSON-карте, а в коде достаточно включить слой:
map.createLayer('Animated Layer', tileset, 0, 0);
Phaser автоматически воспроизводит анимации, заданные в Tiled, если
карта загружена через tilemapTiledJSON.
Большие тайлсеты могут замедлять рендеринг. Для оптимизации используются следующие техники:
Использование спрайтлиста вместо множества изображений.
Кэширование слоёв — создание слоя один раз и
повторное использование через renderTexture.
Разделение карты на несколько слоёв с отключением неиспользуемых слоёв в данный момент игры:
layer.setVisible(false);
layer.setVisible(true);Phaser поддерживает модификацию карт в реальном времени. Для этого применяются методы putTileAt, replaceByIndex, swapByIndex:
layer.putTileAt(5, 10, 15); // вставка плитки с индексом 5 на координаты (10, 15)
layer.replaceByIndex(3, 7); // заменяет все плитки с индексом 3 на 7
Использование тайлсетов в Phaser сочетает визуальную гибкость и производительность, позволяя строить детализированные и интерактивные игровые миры.