Геймдизайн "группа" html5 аудио элементов для включения и выключения звука

Я делаю игру, и я хочу дать игроку возможность отключить все звуки.

Я называю свои аудиофайлы следующим образом:

var STARTSCREEN     = new Audio('sounds/soundtrack-idle-24s.wav');
var GAMEPLAY        = new Audio('sounds/soundtrack-active-24s.wav');
var FX_BREAK        = new Audio('sounds/effect-break.wav');
var FX_BUBBLE       = new Audio('sounds/effect-bubble.wav');
var FX_EXPLOSION    = new Audio('sounds/effect-explosion.wav');

Это прекрасно работает, когда я называю аудио, например, так:

function startButtonClickHandler(event){
    GAMEPLAY.play();
}

Я нашел функцию отключения звука с помощью кнопки

muteButton = document.getElementById('mute-button');

function muteButtonClickHandler(event) {
    audio.muted = !audio.muted;
    event.preventDefault();
}

Так что я должен получить все аудио, сгруппированные как var называется audio,

Но если я сделаю следующее, все это сломается ('Uncaught TypeError: Невозможно прочитать свойство' play 'из undefined'):

var audio = {
    STARTSCREEN     = new Audio('sounds/soundtrack-idle-24s.wav');
    GAMEPLAY        = new Audio('sounds/soundtrack-active-24s.wav');
    FX_BREAK        = new Audio('sounds/effect-break.wav');
    FX_BUBBLE       = new Audio('sounds/effect-bubble.wav');
    FX_EXPLOSION    = new Audio('sounds/effect-explosion.wav');
}

И как меняется мой звонок? Это будет что-то вроде:

audio.GAMEPLAY.play();

1 ответ

Если вы хотите создать объект с аудио:

var audio = {
  STARTSCREEN : new Audio('sounds/soundtrack-idle-24s.wav'),
  GAMEPLAY    : new Audio('sounds/soundtrack-active-24s.wav'),
  FX_BREAK    : new Audio('sounds/effect-break.wav'),
  FX_BUBBLE   : new Audio('sounds/effect-bubble.wav'),
  FX_EXPLOSION: new Audio('sounds/effect-explosion.wav')
};

Теперь вы можете позвонить play() метод каждого аудио, как это:

audio.GAMEPLAY.play();

Чтобы отключить / включить звук, все аудио проходят через этот объект:

function toggleMute() {
  for (var i in audio) {
    audio[i].muted = !audio[i].muted;
  }
}
Другие вопросы по тегам