Phaser предоставляет мощный и гибкий механизм работы со звуком,
позволяющий не только воспроизводить аудиофайлы, но и отслеживать
события их проигрывания. Основные события, на которые стоит обратить
внимание при работе с аудио в Phaser, включают
complete,
looped и
stop. Эти события позволяют создавать
интерактивные аудиоэффекты, синхронизировать музыку с игровыми
действиями и управлять сложными аудиосценами.
Для работы с аудио сначала необходимо загрузить ресурсы через
загрузчик Phaser. Обычно используется метод this.load.audio
внутри метода preload() сцены:
preload() {
this.load.audio('background', 'assets/audio/background.mp3');
this.load.audio('effect', 'assets/audio/effect.wav');
}
После загрузки аудио создаются объекты типа
Phaser.Sound.BaseSound или его наследники
(Phaser.Sound.WebAudioSound,
Phaser.Sound.HTML5AudioSound) через метод
this.sound.add:
create() {
const bgMusic = this.sound.add('background', { loop: true, volume: 0.5 });
const effectSound = this.sound.add('effect');
}
Ключевые параметры при создании звука:
loop – автоматическое повторение
воспроизведения.volume – уровень громкости (0–1).rate – скорость воспроизведения.detune – смещение частоты в центах,
для создания эффектов изменения тона.completeСобытие complete срабатывает, когда
аудиофайл полностью проигран. Это особенно важно для эффектов, которые
должны выполняться после завершения звука, например, переход к
следующему уровню после музыкальной заставки.
effectSound.on('complete', () => {
console.log('Эффект завершился');
});
effectSound.play();
Особенности события complete:
loop: true.off для
предотвращения многократных вызовов:effectSound.off('complete');
loopedСобытие looped срабатывает каждый раз,
когда звуковой файл с параметром loop: true начинает новый
цикл воспроизведения.
bgMusic.on('looped', () => {
console.log('Музыка перезапустилась');
});
bgMusic.play();
Особенности:
volume или rate,
чтобы динамически изменять характеристики звука на каждом новом
цикле.Пример динамического изменения громкости при каждом повторе:
let volume = 0.5;
bgMusic.on('looped', () => {
volume = (volume + 0.1) % 1;
bgMusic.setVolume(volume);
});
stopСобытие stop вызывается при явной
остановке воспроизведения звука через метод stop() или при
уничтожении звукового объекта. Это полезно для управления состоянием
игры и предотвращения наложения нескольких звуков.
effectSound.on('stop', () => {
console.log('Звук был остановлен');
});
effectSound.play();
// Прерывание воспроизведения через 2 секунды
this.time.delayedCall(2000, () => {
effectSound.stop();
});
Особенности события stop:
Сценарии использования:
Музыкальная заставка с переходом к игре:
complete или looped для
синхронизации появления меню.Эффекты оружия или взрывов:
effect с событием complete, после
которого можно запускать анимацию взрыва.Динамическая музыка:
looped для изменения громкости, фильтров
или добавления новых инструментов при каждом повторе.Остановка звука при смене сцены:
stop() для всех текущих звуков и обработка
события stop для очистки ресурсов.off для удаления слушателей, чтобы
избежать утечек памяти при повторном создании звуков.complete, looped и stop.С помощью этих событий создается полное управление звуковой частью игры: можно отслеживать завершение эффектов, корректно обрабатывать циклы музыки и безопасно останавливать воспроизведение, что делает аудио гибким и интерактивным элементом игрового процесса.