Атлас текстур — это объединённое изображение,
содержащее несколько спрайтов, упакованных в один файл. Использование
атласов позволяет значительно оптимизировать производительность игр на
базе Phaser, снижая количество отдельных загрузок
изображений и ускоряя рендеринг.
Основы работы с атласами
Атлас текстур состоит из двух компонентов:
- Изображение атласа (PNG, JPG, WebP) — содержит все
спрайты в одном файле.
- Файл описания (JSON, XML, CSV) — хранит координаты
и размеры каждого спрайта внутри атласа.
Phaser может работать с атласами через
this.load.atlas(key, textureURL, atlasURL) в сцене. Ключ
используется для обращения к спрайтам, а JSON-файл содержит данные о
позициях.
this.load.atlas('player', 'assets/player.png', 'assets/player.json');
TexturePacker
TexturePacker — коммерческий инструмент, широко
используемый для создания игровых атласов.
Преимущества:
- Автоматическая оптимизация расположения спрайтов для минимизации
пустого пространства.
- Поддержка форматов JSON, XML, CSS и других.
- Возможность генерации ретина-версий (HiDPI) для разных разрешений
экранов.
- Настройка фильтров и обрезки прозрачных областей.
Процесс генерации атласа в TexturePacker:
- Добавление исходных спрайтов в проект.
- Настройка формата экспорта. Для Phaser
рекомендуется выбирать JSON Hash или JSON Array.
- Указание максимальных размеров атласа (например, 2048x2048) для
оптимизации памяти GPU.
- Настройка опций обрезки (Trim) и поворота спрайтов (Allow Rotation),
что позволяет экономить место.
- Экспорт атласа: создается PNG-файл и JSON-файл с описанием.
Пример JSON Hash для Phaser:
{
"frames": {
"walk_01": {"frame": {"x":0,"y":0,"w":64,"h":64}},
"walk_02": {"frame": {"x":64,"y":0,"w":64,"h":64}}
},
"meta": {
"image": "player.png",
"size": {"w":128,"h":64}
}
}
В Phaser подключение атласа:
this.load.atlas('player', 'assets/player.png', 'assets/player.json');
this.add.sprite(100, 100, 'player', 'walk_01');
Shoebox
Shoebox — бесплатный инструмент, ориентированный на
2D-художников и инди-разработчиков. Основная функция — генерация атласов
и спрайт-листов с простой настройкой.
Особенности Shoebox:
- Поддержка экспортов PNG + JSON, XML и TexturePacker совместимых
форматов.
- Возможность пакетной обработки кадров анимации.
- Простой интерфейс drag-and-drop.
- Поддержка сдвига спрайтов и автоматического выравнивания.
Процесс работы:
- Перетаскивание всех кадров анимации в Shoebox.
- Настройка параметров Padding и Border
Padding, чтобы спрайты не пересекались.
- Выбор формата JSON Hash для совместимости с Phaser.
- Генерация атласа: формируются PNG и JSON с координатами
спрайтов.
Советы по оптимизации
атласов
- Минимизация пустого пространства: использование
опции поворота спрайтов позволяет помещать прямоугольники в более
плотное расположение.
- Объединение похожих спрайтов: анимации одного
персонажа лучше объединять в один атлас, чтобы сократить переключение
текстур.
- Разделение больших атласов: если атлас превышает
возможности видеопамяти устройства, имеет смысл разбить на несколько
меньших.
- Формат PNG с альфа-каналом: рекомендуется для
прозрачных спрайтов. WebP может уменьшить размер, но поддержка зависит
от платформы.
Интеграция в Phaser
После генерации атласа его можно использовать для:
- Создания спрайтов и анимаций:
this.anims.create()
использует ключи фреймов из JSON.
- Быстрой смены текстур спрайтов с помощью
setFrame(frameName).
- Оптимизации рендеринга через объединённые текстуры, что уменьшает
количество draw calls.
Пример создания анимации:
this.anims.create({
key: 'walk',
frames: this.anims.generateFrameNames('player', {
prefix: 'walk_',
start: 1,
end: 4
}),
frameRate: 10,
repeat: -1
});
this.player = this.add.sprite(100, 100, 'player');
this.player.anims.play('walk');
Использование атласов в Phaser не только упрощает управление
спрайтами, но и значительно повышает производительность, особенно при
множестве одновременно отображаемых объектов.