AudioSprite — это технология объединения нескольких звуковых эффектов в один аудиофайл с последующей разметкой таймингов каждого эффекта в JSON. Такой подход значительно уменьшает количество сетевых запросов и повышает производительность игры, особенно на мобильных устройствах.
В Phaser AudioSprite работает через загрузку двух ресурсов:
.mp3 или .ogg.loop
или volume.Пример структуры JSON для AudioSprite:
{
"spritemap": {
"jump": { "start": 0, "end": 1, "loop": false },
"explosion": { "start": 1.5, "end": 3, "loop": false },
"coin": { "start": 3.2, "end": 3.7, "loop": false }
}
}
Здесь ключи jump, explosion и
coin — это имена отдельных звуков, а start и
end задают диапазон воспроизведения в секундах.
Для использования AudioSprite необходимо сначала загрузить файлы в
сцене. В Phaser 3 это делается через метод
this.load.audioSprite.
this.load.audioSprite('sfx', 'assets/audio/sfx.json', ['assets/audio/sfx.mp3', 'assets/audio/sfx.ogg']);
Параметры метода:
'sfx' — ключ для обращения к аудиосприту.'assets/audio/sfx.json' — путь к JSON с разметкой
спрайта.После загрузки ресурсов AudioSprite доступен через объект
this.sound.
Воспроизвести отдельный звук из AudioSprite можно с помощью метода
play:
this.sound.playAudioSprite('sfx', 'jump');
Аргументы:
'sfx' — ключ загруженного AudioSprite.'jump' — имя конкретного звука из JSON-спрайта.Дополнительно можно передавать настройки через объект:
this.sound.playAudioSprite('sfx', 'coin', { volume: 0.5, rate: 1.2 });
Настройки включают:
volume — громкость от 0 до 1.rate — скорость воспроизведения.loop — зацикливание эффекта (true/false).AudioSprite в Phaser предоставляет расширенные методы управления:
this.sound.stopAudioSprite('sfx', 'jump');
if (this.sound.isPlayingAudioSprite('sfx', 'explosion')) {
// Действия во время воспроизведения
}
let sound = this.sound.addAudioSprite('sfx', 'coin');
sound.setVolume(0.7);
sound.setRate(1.5);
sound.play();
Метод addAudioSprite создаёт объект звука, позволяющий
точечно управлять его параметрами, в отличие от глобального вызова
playAudioSprite.
Объединение мелких эффектов в AudioSprite снижает нагрузку на браузер, особенно при множественных одновременных звуках. Однако:
.mp3 и .ogg, обеспечивая поддержку всех
браузеров.Кэширование и повторное использование объектов звука
через addAudioSprite улучшает производительность при
многократных воспроизведениях одного и того же эффекта.
// Загрузка
this.load.audioSprite('sfx', 'assets/audio/sfx.json', ['assets/audio/sfx.mp3', 'assets/audio/sfx.ogg']);
// Создание объектов звуков
this.jumpSound = this.sound.addAudioSprite('sfx', 'jump');
this.explosionSound = this.sound.addAudioSprite('sfx', 'explosion');
// Воспроизведение эффектов
this.jumpSound.play({ volume: 0.8 });
this.explosionSound.play({ rate: 1.2 });
// Динамическое изменение параметров
this.jumpSound.setVolume(0.5);
this.explosionSound.setLoop(true);
Этот подход позволяет гибко управлять множеством коротких звуков из одного файла, упрощает код и минимизирует сетевые запросы.
.mp3 и .ogg одновременно.Хотите, могу подготовить диаграмму структуры AudioSprite с пояснениями всех элементов и их связей для наглядного понимания?