В Phaser 3 загрузка ресурсов является
фундаментальным этапом разработки игр. Без корректной загрузки
изображений, спрайтов и атласов невозможно создать полноценный игровой
мир. Все ресурсы загружаются через объект
this.load внутри сцены, обычно в методе
preload().
preload() {
this.load.image('background', 'assets/background.png');
this.load.spritesheet('player', 'assets/player.png', {
frameWidth: 32,
frameHeight: 48
});
}
Ключевые моменты:
this.load.image(key, url) — загружает
одно изображение.this.load.spritesheet(key, url, {frameWidth, frameHeight})
— загружает спрайт-лист, разбивая изображение на кадры заданного
размера.key — уникальный идентификатор
ресурса, используемый при создании объектов.Атлас текстур представляет собой один файл изображения и файл описания (JSON), который задаёт расположение и размеры отдельных спрайтов. Использование атласов снижает количество HTTP-запросов и оптимизирует производительность.
preload() {
this.load.atlas('characters', 'assets/characters.png', 'assets/characters.json');
}
Объяснение параметров:
key — уникальное имя атласа.textureURL — путь к изображению
атласа.atlasDataURL — путь к JSON-файлу с
данными о кадрах.JSON может быть создан вручную или экспортирован из редакторов вроде TexturePacker. Пример простого формата:
{
"frames": {
"hero_idle_1": { "frame": {"x":0,"y":0,"w":32,"h":48} },
"hero_idle_2": { "frame": {"x":32,"y":0,"w":32,"h":48} }
}
}
Особенности:
x, y — координаты верхнего левого угла
кадра на изображении.w, h — ширина и высота кадра.Анимации создаются на основе кадров, заданных в атласе. Метод
this.anims.create формирует
последовательности для спрайтов.
create() {
this.anims.create({
key: 'hero_idle',
frames: this.anims.generateFrameNames('characters', {
prefix: 'hero_idle_',
start: 1,
end: 2
}),
frameRate: 5,
repeat: -1
});
const hero = this.add.sprite(100, 200, 'characters', 'hero_idle_1');
hero.play('hero_idle');
}
Пояснения:
prefix и
start/end позволяют
автоматически собрать последовательность кадров.frameRate — количество кадров в
секунду.repeat: -1 — бесконечное повторение
анимации.Phaser поддерживает множество типов ресурсов, включая аудио и тайлы:
preload() {
this.load.audio('bg_music', ['assets/bg_music.mp3', 'assets/bg_music.ogg']);
this.load.tilemapTiledJSON('level1', 'assets/level1.json');
}
Phaser.Tilemaps.Для отображения прогресса загрузки используется событие
progress:
preload() {
let progressBar = this.add.graphics();
this.load.on('progress', (value) => {
progressBar.clear();
progressBar.fillStyle(0xffffff, 1);
progressBar.fillRect(0, 200, 800 * value, 50);
});
}
Ключевые события загрузки:
progress — значение от 0 до 1,
показывает общий прогресс.filecomplete — срабатывает после
загрузки отдельного файла.complete — все ресурсы загружены,
можно переходить к create().Phaser автоматически кэширует все загруженные ресурсы. Повторная загрузка с тем же ключом не требуется и может привести к ошибке. Для очистки кэша используются методы:
this.textures.remove('characters'); // удаляет текстуру
this.cache.json.remove('level1'); // удаляет JSON
Знание этих инструментов позволяет создавать сложные игровые сцены с большим количеством спрайтов и анимаций без потери производительности.