~1 мин чтения

Загрузчик и ресурсы

Как работает конвейер ресурсов — постановка в очередь в preload, типизированный кеш и шаблоны для больших игр.

У каждой сцены есть загрузчик (this.load), который ставит запросы на ресурсы в очередь во время preload(). Когда preload() возвращает управление, загрузчик отрабатывает до конца, прежде чем будет вызван create().

Базовая форма

preload() {
	this.load.image('player', 'assets/player.png');
	this.load.spritesheet('explosion', 'assets/explosion.png', { frameWidth: 64, frameHeight: 64 });
	this.load.audio('hit', ['assets/hit.ogg', 'assets/hit.mp3']);
	this.load.json('levels', 'assets/levels.json');
}

Каждая запись регистрируется под строковым ключом. Соответствующий кеш предоставляет типизированные методы доступа — this.textures.get('player'), this.cache.json.get('levels') и т. д.

Прогресс загрузки

Чтобы показать индикатор прогресса, подпишитесь на события загрузчика во время preload:

this.load.on('progress', (p: number) => bar.setScale(p, 1));
this.load.on('complete', () => bar.destroy());

Распространённый шаблон — крошечная сцена Boot, которая загружает ресурсы самого индикатора загрузки, а затем переходит к сцене Preload, загружающей всё остальное.

Загрузка после preload

Вы можете вызвать this.load.image(...) после preload, но при этом необходимо явно запустить загрузчик:

this.load.image('boss', 'assets/boss.png');
this.load.once('complete', () => this.spawnBoss());
this.load.start();

Полезно для потоковой подгрузки данных уровня, но по возможности предпочитайте предварительную (eager) загрузку — стоимость задержки посреди игры во время выполнения гораздо выше, чем стоимость памяти на хранение текстуры.

Атласы

Для нетривиальных игр упаковывайте спрайты в текстурный атлас, а не загружайте каждый PNG по отдельности:

this.load.atlas('ui', 'assets/ui.png', 'assets/ui.json');
this.add.image(0, 0, 'ui', 'button-play');

Меньше файлов, меньше вызовов отрисовки, меньше перерасхода памяти GPU.

Связанные темы

  • Сцены — жизненный цикл, которому принадлежит загрузчик.
  • Игровые объекты — потребители загруженных текстур.