JavaScript, Phaser: вызов функции с setTimeout - задержка не работает - PullRequest
1 голос
/ 08 января 2020

Я сделал фазерную игру, которую нужно поместить в рамку на веб-сайте. Если во время игры игрок нажимает в любом месте на веб-сайте, у меня есть функция, которая показывает HTML элементов, чтобы предупредить игрока, здесь:

function showOnLoseFocus()
{    
    if( window.globalGame !== null && window.globalGame !== undefined )
    {
        document.getElementById('container_refocusWarning').style.display = 'block';        
        document.getElementById('refocusTitle').innerHTML = ((getHtmlTextFromXML('restore_default') === '' ? 'Game Paused' : getHtmlTextFromXML('restore_default')));
        document.getElementById('refocusResume').innerHTML = ((getHtmlTextFromXML('restore_tap') === '' ? '(Tap to resume game)' : getHtmlTextFromXML('restore_tap')));
    }
}

Вышеописанное работает просто отлично.

Теперь я пытаюсь создать аналогичную функцию adLoseFocus, предназначенную для уведомления игрока об окончании рекламы, но с задержкой в ​​3 секунды до ее показа. Сам Phaser имеет встроенную функцию задержки, которую я попробовал здесь:

this.game.time.events.add(3000, adLoseFocus);

К сожалению, это, похоже, не работает, поэтому с тех пор я попытался изменить adLoseFocus, чтобы вместо него использовать setTimeOut, здесь :

function adLoseFocus( bIsMuted, p_callback, bIsAd = true)
{
    adRegainMute = bIsMuted;
    adActive = true;
    window.globalGame.sound.mute = true;
    if( window.globalGame !== null && window.globalGame !== undefined && bIsAd)
    {
        setTimeout(function() {            
            document.getElementById('container_refocusWarning').style.display = 'block';
            document.getElementById('refocusTitle').innerHTML = getHtmlTextFromXML('restore_ad');
            document.getElementById('refocusResume').innerHTML = getHtmlTextFromXML('restore_tap');
        }, 3000);
    }
    fAdCallback = p_callback;
}

Это тоже не работает; предупреждение отображается сразу. Я что-то упустил?

1 Ответ

2 голосов
/ 09 января 2020

Моя ошибка, видимо, ошибка была в вызове функции. При этом:

adLoseFocus(true, callbackFunction)

по какой-то причине не проходит проверку bIsAd, даже если для нее установлено значение по умолчанию. Делая это вместо этого:

adLoseFocus(true, callbackFunction, true)

гарантирует, что это работает.

...