BasilYes / godot-yandex-games-sdk

Yandex games SDK implementation for godot
MIT License
81 stars 6 forks source link

Прошу помощи в убирании звука игры во время рекламы #10

Closed Regrad closed 6 months ago

Regrad commented 6 months ago

Вызываю рекламу при помощи YandexSDK.show_ad() Никак не хочет работать подключённый сигнал YandexSDK.connect("ad", self, "sound_on"). Функция sound_on не вызывается.

Мне кажется я иду не по верному пути. Как отключать звук и музыку (или ставить игру на паузу) во время показа рекламы?

BasilYes commented 6 months ago

Проверь логи, если там принтуется, что реклама показана или что возникла ошибка, значит сигнал 100% вызван и ты не так на него подписался (а ещё не забывай что у сигнала есть аргумент), если не принтуется, проверь вызывается ли логика ждаваскрипта (там тоже принт похожий), т.е. если ты получил 2 принта, значит все ок, и у тебя какие-то проблемы с подпиской на сигнал, если нет пиши сюда подробнее с логом

func _rewarded_ad(args):
    print("rewarded ad res: ", args[0])
    emit_signal("rewarded_ad", args)

func _ad(args):
    print("ad res: ", args[0])
    emit_signal("ad", args[0])
Regrad commented 6 months ago

Я проверял код func _ad(args) Он не вызывается. Так же я вызывал _ad(args) принудительно и в этом случае сигнал работает. Так или иначе мой вопрос больше в том, как узнать о начале и конце показа рекламы, чтобы принудительно выключать звук в игре. Ну или какие есть варианты, а то Яндекс не пропускает игру, пока это не будет решено =(

BasilYes commented 6 months ago

Начало показа рекламы, когда ты вызываешь функцию показа рекламы. Конец когда по идее возвращается сигнал. Можешь посмотреть файл который .js там записана сама функция показа скопипащенная из документации Яндекса, там свой принт стоит (js овский), он вызывается когда ты запускаеш показ рекламы? (Посмотри логив браузере)

BasilYes commented 6 months ago

Может ты запускаешь рекламу с наградой? Тогда это другой сигнал

Regrad commented 6 months ago

Проблема в том, что Яндекс не всегда показывает рекламу при запросе на это. Это приведёт к тому, что убрав звук, я не смогу получить сигнал о закрытии рекламы. Я запускаю рекламу при помощи YandexSDK.show_ad() Подключение сигнала при помощи YandexSDK.connect("ad", self, "start_game") Ну и сама функция выглядит так: func start_game(ad_result):

BasilYes commented 6 months ago

Так, я посмотрел внимательнее. У меня не хватает колбеков для вызова рекламы вот в эту функцию (в .js файле)

function ShowAd(callback) {
    console.log('Show ad');
    ysdk.adv.showFullscreenAdv({
        callbacks: {
            onClose: function(wasShown) {
                callback('closed')
                console.log('Ad shown');
            },
            onError: function(error) {
                callback('error')
                console.log('Ad error');
            }
        }
    })
}

Нужно добавить обработчики для событий описанных в документации: onOpen — вызывается при успешном открытии рекламы. onOffline — вызывается при потере сетевого соединения (переходе в офлайн-режим). по аналогии, если запушиш потом это сюда будет прекрасно. Если нет, я сам это сделаю попозже.

Regrad commented 6 months ago

Я бы рад, но с JS имею опыта, поэтому и пришёл сюда =) Если ты будешь вносить это в свой аддон - я лучше подожду комита от автора =) Пока для меня твой аддон это магический чёрный ящик. Первый опыт с WEB =)

BasilYes commented 6 months ago

Хахахахахаха, я тоже 0 в вебе, я просто скопипастил примеры из документации и сделал часть по аналогии

Regrad commented 6 months ago

И всё же вопрос по поводу того, что нет сигнала при закрытии рекламы пока остаётся. Я ещё раз перепроверил - не вызывается функция, которая должна отправить сигнал.

BasilYes commented 6 months ago

Попробуй поледний коммит Работоспособность не гарантирую, делал прямо в гитхабе

Regrad commented 6 months ago

Ух ты, заработало. Ты гений. Звук на рекламу останавливается! И всё отлично работает. Если реклама не показывается - звук не пропадает. То что нужно! Спасибо!