В библиотеке Phaser управление звуковыми эффектами и музыкой строится через встроенный Audio Manager, который обеспечивает загрузку, хранение и воспроизведение аудиофайлов. Основные операции для работы со звуком сводятся к двум ключевым действиям: добавление звука в сцену и его воспроизведение.
this.sound.addМетод this.sound.add создаёт экземпляр звука, который
можно воспроизводить многократно. Этот подход отличается от немедленного
воспроизведения, так как позволяет гибко управлять параметрами
звука.
Синтаксис:
let sound = this.sound.add(key, config);
key — идентификатор аудиофайла, который был
загружен через this.load.audio.
config — объект с настройками звука. Основные свойства:
volume — громкость (0.0–1.0).loop — зациклить звук
(true/false).detune — изменение частоты воспроизведения в
центах.rate — скорость воспроизведения.Пример:
this.load.audio('jump', 'assets/audio/jump.mp3');
let jumpSound;
function create() {
jumpSound = this.sound.add('jump', { volume: 0.5 });
}
После выполнения кода объект jumpSound будет хранить
ссылку на аудиофайл и предоставлять методы для управления
воспроизведением.
playМетод play запускает воспроизведение аудио. Его можно
применять как к отдельному звуковому объекту, так и напрямую через
менеджер звука.
Использование через объект:
jumpSound.play();
Использование через менеджер звука напрямую:
this.sound.play('jump', { volume: 0.7, loop: false });
При прямом вызове через this.sound.play объект звука
создаётся автоматически и воспроизводится один раз. Этот подход удобен
для одноразовых эффектов, таких как выстрелы, прыжки или сбор
предметов.
Метод play поддерживает объект конфигурации, позволяющий
контролировать параметры звука:
Пример с несколькими параметрами:
this.sound.play('explosion', {
volume: 0.8,
loop: false,
rate: 1.2,
detune: 100
});
Звук будет воспроизводиться с повышенной скоростью и немного выше по тону.
Создание объекта звука через add позволяет многократное
использование одного и того же ресурса без повторной загрузки. Это
особенно важно для фоновой музыки или часто повторяющихся эффектов.
let bgMusic = this.sound.add('background', { loop: true, volume: 0.3 });
bgMusic.play();
Можно ставить на паузу, останавливать или изменять параметры на лету:
bgMusic.pause();
bgMusic.resume();
bgMusic.stop();
bgMusic.setVolume(0.5);
Phaser автоматически управляет одновременно воспроизводимыми звуками, но для более точного контроля можно создавать несколько экземпляров одного звука:
let laser1 = this.sound.add('laser');
let laser2 = this.sound.add('laser');
laser1.play();
laser2.play();
Это позволяет запускать один и тот же звук несколько раз почти одновременно, что часто требуется в динамичных играх.
Phaser предоставляет систему событий для звуковых объектов:
on('complete', callback) — вызывается по завершении
воспроизведения.on('loop', callback) — срабатывает при каждом цикле при
зацикливании.on('fade', callback) — срабатывает при изменении
громкости через метод fade.Пример:
bgMusic.on('loop', () => {
console.log('Фоновая музыка зациклена снова');
});
this.sound.play.this.sound.add с сохранением объекта.Эти инструменты позволяют строить сложную звуковую систему в играх, обеспечивая гибкость, эффективность и точное управление аудиовоспроизведением.