В библиотеке Phaser для работы с тайловыми картами используется система Tilemap. Тайловая карта состоит из слоёв (Layers) и тайлов (Tiles). Каждый слой представляет собой сетку ячеек одинакового размера, где каждая ячейка содержит конкретный тайл из тайлового набора (Tileset). Тайлы используются для визуального оформления мира игры, а слои — для организации логики отображения и взаимодействия объектов.
Тайл хранит несколько ключевых свойств:
collide: true);Слой представляет собой более высокий уровень абстракции. Он содержит сетку тайлов, управляет рендерингом и взаимодействием с физикой. С помощью слоя можно:
putTileAt и
removeTileAt;Каждый тайл можно получить через методы слоя:
let tile = layer.getTileAt(x, y); // возвращает тайл в координатах сетки
tile.index = 5; // изменение тайла на другой по индексу
tile.properties.solid = true; // установка пользовательского свойства
tile.visible = false; // скрытие тайла
Динамическое изменение тайлов позволяет создавать интерактивные уровни. Например, разрушимые стены или меняющиеся платформы реализуются через изменение индекса тайла или его свойств.
Для массового изменения тайлов используется метод
forEachTile:
layer.forEachTile(tile => {
if (tile.properties.solid) {
tile.setCollision(true);
}
});
Это особенно удобно для настройки столкновений после загрузки карты из редактора, такого как Tiled.
Слой содержит не только сетку тайлов, но и свои свойства, влияющие на отображение и физику:
Пример установки столкновений по свойству:
layer.setCollisionByProperty({ collide: true });
Это автоматически помечает все тайлы с свойством collide
как физически непроходимые.
Тайлы могут быть анимированы с помощью Tileset animations. Для этого задаются последовательности индексов и скорость смены кадров. Анимация работает через слой:
this.anims.create({
key: 'water',
frames: this.anims.generateFrameNumbers('tileset', { start: 0, end: 3 }),
frameRate: 6,
repeat: -1
});
layer.forEachTile(tile => {
if (tile.index === waterTileIndex) {
tile.setAnimated(true);
}
});
Такой подход позволяет создавать движущиеся элементы, такие как вода, лаву или светящиеся объекты, без добавления отдельного спрайта на карту.
Phaser оптимизирован для работы с большими тайловыми картами, но есть несколько рекомендаций:
Эти практики повышают производительность и позволяют создавать масштабные уровни с минимальной нагрузкой на движок.
Слоёвая структура тесно связана с камерой Phaser. Свойства
scrollFactorX и scrollFactorY позволяют
реализовать параллакс-эффект. Слои с меньшими
коэффициентами движутся медленнее, создавая иллюзию глубины.
backgroundLayer.setScrollFactor(0.5, 0.5); // фон движется медленнее игрока
foregroundLayer.setScrollFactor(1, 1); // основной слой синхронизирован с камерой
Такой подход обеспечивает визуальную сложность сцены без увеличения числа объектов и спрайтов.
Phaser позволяет хранить в тайлах и слоях пользовательские свойства, которые можно задавать в редакторе Tiled или вручную через код. Это открывает возможность привязывать к тайлам любые игровые данные:
Использование свойств упрощает разделение визуальной части и игровой логики, позволяя изменять поведение карты без модификации кода движка.