Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.10.2023, 14:08
Аватар для dandiablo
Интересующийся
Отправить личное сообщение для dandiablo Посмотреть профиль Найти все сообщения от dandiablo
 
Регистрация: 27.11.2022
Сообщений: 12

Управление звуками и музыкой в Canvas
Доброго времени суток!

Почти доделал Змейку на JavaScript по обучающим урокам.

Дошел до звука и он включается, но в видео нет примера выключения.

Вот код по звуку в объекте game:

sounds:{

        start:null,

        food:null,

        apple:null,

        bomb:null,

        explosion:null,

        loss:null,

        music:null

    },

preload(callback){

        let loaded = 0;

        let required = Object.keys(this.sprites).length + Object.keys(this.sounds).length;

        let onAssetLoad = () => {

                ++loaded;

                if (loaded >= required) {

                    callback();

                }

             };

            this.preloadSprites(onAssetLoad);

            this.preloadSounds(onAssetLoad);

    },


    preloadSounds(onAssetLoad){

        for(let key in this.sounds){

            this.sounds[key] = new Audio();

            this.sounds[key].src = "sounds/" + key + ".mp3";

            this.sounds[key].addEventListener("canplaythrough", onAssetLoad, {once: true});

        }

    },

// это я уже пробую вырубить музыку
musicOff(){


if (this.playMusic) {

        this.sounds.music.stop();

        this.playMusic = false;

        }

    },



Соответственно, включается музыка так:

this.sounds.music.loop = true;

this.sounds.music.play();



Логично было бы предположить, что вырубить музыку в не game по кнопке как то так:


game.buttonMusic.addEventListener('click', function () {

game.musicOff();

});



Но консоль выдала мне такое сообщение:

Код:
game.sounds.music.stop is not a function
И тут я не понимаю, а гугл мне пока показывает несколько другие примеры реализации.

Если есть метод play() для звуков в canvas:

this.sounds.music.play();


То по чему нет или не реализуется у меня метод stop()?

Конечно, можно реализовать вкл/выкл звуков через тэг sound html, но хочется понять и не рушить выстроенный код.

Благодарю!
Ответить с цитированием
  #2 (permalink)  
Старый 04.10.2023, 14:14
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Тебе нужен .pause().

Открываешь консоль, пишешь console.log(new Audio()) и смотришь какие методы там действительно есть.*
Открываешь mdn находишь Audio и смотришь какие методы там есть.**


* Надо раскрывать prototype, чтоб добраться до них.
** надо перейти в родителя - HTMLMediaElement, чтоб их найти.

Не очень юзерфрендли для новичка, признаю, обычно таки найти информацию проще.
__________________
29375, 35

Последний раз редактировалось Aetae, 04.10.2023 в 14:19.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить расположение iframe и canvas и не перерисовать? Was-Ja Общие вопросы Javascript 2 08.11.2020 23:51
Управление Canvas из Javascript под браузер mmmaks2004 Javascript под браузер 0 30.01.2016 23:44
Повтор фото (getUserMedia(),HTML5 Canvas) aspex Элементы интерфейса 1 27.12.2014 16:46
Создание экземпляра Canvas не затрагивая HTML Tails Общие вопросы Javascript 2 09.03.2012 13:55
Добавить на canvas еще один елемент greengarlic Общие вопросы Javascript 5 22.09.2010 10:16