Добавление звука: add и play

В библиотеке 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 поддерживает объект конфигурации, позволяющий контролировать параметры звука:

  • volume — регулировка громкости.
  • loop — циклическое воспроизведение.
  • rate — скорость воспроизведения (ускорение или замедление).
  • detune — изменение высоты звука.

Пример с несколькими параметрами:

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 с сохранением объекта.
  • Настройки громкости, скорости и зацикливания следует задавать на этапе создания или воспроизведения, чтобы контролировать поведение звука.
  • Использование нескольких экземпляров одного звука обеспечивает реалистичное аудио без задержек.

Эти инструменты позволяют строить сложную звуковую систему в играх, обеспечивая гибкость, эффективность и точное управление аудиовоспроизведением.