В Phaser SoundManager является центральным компонентом
для работы с аудио. Он управляет воспроизведением звуков, музыки,
эффектов и позволяет гибко настраивать параметры звуковых дорожек.
Инициализация SoundManager происходит автоматически при
создании сцены, если в конфигурации игры включена поддержка аудио.
Простейшая конфигурация игры с аудио выглядит следующим образом:
const config = {
type: Phaser.AUTO,
width: 800,
height: 600,
scene: {
preload: preload,
create: create
},
audio: {
disableWebAudio: false
}
};
const game = new Phaser.Game(config);
Здесь ключ audio.disableWebAudio определяет, будет ли
использоваться Web Audio API (рекомендуется) или fallback на HTML5
Audio. Использование Web Audio обеспечивает низкую задержку и богатые
возможности обработки звука.
Для работы с аудио необходимо сначала загрузить ресурсы через метод
preload сцены. Phaser поддерживает форматы MP3, OGG и
WAV.
function preload() {
this.load.audio('background', 'assets/audio/background.mp3');
this.load.audio('jump', 'assets/audio/jump.wav');
}
После загрузки звуки становятся доступными через
this.sound.add():
function create() {
const bgMusic = this.sound.add('background', {
loop: true,
volume: 0.5
});
const jumpSound = this.sound.add('jump', {
volume: 1.0
});
bgMusic.play();
}
Ключевые параметры при добавлении звука:
loop — определяет, будет ли звук зациклен.volume — уровень громкости (0.0–1.0).detune — настройка высоты тона в центах.rate — скорость воспроизведения (0.5–2.0).SoundManager предоставляет полный контроль над
воспроизведением:
jumpSound.play();
jumpSound.pause();
jumpSound.stop();
jumpSound.resume();
Можно использовать события для отслеживания состояния звуков:
jumpSound.on('complete', () => {
console.log('Звук завершен');
});
Это позволяет синхронизировать события игры с аудио, например, анимации или физические эффекты.
Phaser позволяет управлять множеством звуков одновременно. Для этого можно использовать массивы или кастомные группы:
const effects = [
this.sound.add('jump'),
this.sound.add('explosion'),
this.sound.add('coin')
];
effects.forEach(sound => {
sound.play();
});
Для массового изменения параметров звуков используется
this.sound.setVolume() или
this.sound.pauseAll().
this.sound.setVolume(0.2); // уменьшение громкости всех звуков
this.sound.pauseAll(); // приостановка всех звуков
На уровне сцены SoundManager можно настроить глобальные
параметры:
this.sound.mute = false; // отключение всех звуков
this.sound.volume = 0.7; // глобальная громкость
this.sound.context.resume(); // восстановление Web Audio контекста
Особенность Web Audio API в том, что воспроизведение звука может быть
приостановлено браузером до первого взаимодействия пользователя. В этом
случае вызов context.resume() решает проблему.
Фоновая музыка обычно зацикливается и имеет меньшую громкость:
const music = this.sound.add('background', { loop: true, volume: 0.3 });
music.play();
Эффекты выполняются кратковременно и с полной громкостью:
this.input.on('pointerdown', () => {
this.sound.play('jump');
});
Использование this.sound.play('key') напрямую удобно для
коротких звуков, а this.sound.add('key') подходит для более
сложного управления, включая паузу и зацикливание.
detune или
rate позволяет создавать эффекты ускорения, замедления или
изменения тона.setPosition(x, y, z) и
setPan(pan).destroy() освобождают ресурсы при окончании использования
звука.Пример с позиционным эффектом:
const effect = this.sound.add('jump');
effect.setPan(-1); // звук слева
effect.play();
Использование SoundManager в Phaser обеспечивает гибкое,
эффективное и детализированное управление аудио, позволяя реализовывать
как простые звуковые эффекты, так и сложные музыкальные сцены с
позиционным и динамическим управлением.