Функция ожидания Action Script 2.0

Я создаю веб-сайт с вводной заставкой, которая ждет 5 секунд, прежде чем автоматически отправить точку воспроизведения на кадр 17, если никто не нажал кнопку ввода, делая то же самое.

Мой код для этого здесь:

функция ожидания () { остановка (); var myInterval = setInterval(function () { _level0.menu_number2 = 0; gotoAndStop(17); clearInterval(myInterval); }, 5*1000); // остановка на 5 секунд } wait();

Все это работает нормально, но если я не ждал и нахожусь на сайте до истечения 5 секунд, я внезапно непреднамеренно возвращаюсь к кадру 17 через 5 секунд.

Теперь я знаю, что мне нужно что-то в структуре моего кода, чтобы проверить, не изменились ли условия за эти пять секунд, т. е. головка воспроизведения переместилась за пределы 15-го кадра, и если да, то ничего не делать, но я не уверен, что это что-то.

пожалуйста помоги.


person Community    schedule 08.06.2009    source источник
comment
почему бы не использовать setTimeout? приветствие back2dos   -  person back2dos    schedule 09.06.2009


Ответы (5)


Попробуйте этот код: он использует что-то, называемое замыканием (посмотрите, если вам интересно)

function wait(){
    stop();
    var myInterval = setInterval(function(){
        _level0.menu_number2 = 0;
        gotoAndStop(17);
        clearInterval(myInterval);
    }, 5*1000); // stop for 5 seconds
    return function(){ clearInterval(myInterval); };
}
var abortFunction = wait(); // Calls wait(), interval starts ticking
abortFunction(); // Aborts the interval

Вы также можете вставить куда-нибудь глобальную переменную и проверить ее, но это только загрязнит глобальное пространство имен.

person zenazn    schedule 08.06.2009

Вы всегда можете просто очистить интервал (myInterval), если они нажмут кнопку пропуска. Или заверните его в функцию без необходимости: function stopwait(){ clearInterval(myInterval); };

Чтобы проверить номера кадров, вы можете использовать: if(_root._currentFrame ‹ 17)

person Eric Muyser    schedule 08.06.2009
comment
Проблема здесь в том, что ссылка на myInterval умирает после выполнения wait(). Вот для чего закрытие. Да, вероятно, было бы чище вообще не иметь функции wait() (и просто иметь кучу операторов в кадре), но это не то, о чем задавался вопрос. - person zenazn; 08.06.2009

Начиная с Flash Player 8, существует встроенная функция setTimeOut, которую можно использовать для реализации паузы. Я предполагаю, что внутри это оболочка для setInterval и т. д. Это работает следующим образом:

function onContinue( message )
{
   trace("continue saying: " + message);
}

setTimeOut( onContinue, 1000, "hello" );

Первый параметр — это вызываемая функция. Второй параметр — это время ожидания в миллисекундах (1000 = 1 секунда), а третий параметр является необязательным и может использоваться для передачи значения обратному вызову.

person Luke    schedule 08.06.2009

Я подумал, что должен обновить эту проблему, так как раньше я был немного преждевременным.

После некоторого тестирования я обнаружил, что код Zenazn нуждается в небольшом дополнении, поэтому я добавил строку _currentFrame от Эрика Мюйсера, и теперь все работает нормально, так что еще раз всем спасибо.

Вот сценарий действий:

function wait(){
    stop();
    var myInterval = setInterval(function(){
      if(_currentFrame < 15){//This statement checks to see if the play head has moved past frame 15
      gotoAndStop(17);
    }
        clearInterval(myInterval);
    }, 5*1000); // stop for 5 seconds
    return function(){ clearInterval(myInterval); };
}
var abortFunction = wait(); // Calls wait(), interval starts ticking
person Community    schedule 09.06.2009

вы можете использовать библиотеку tweenlite http://blog.greensock.com/tweenliteas2/

TweenLite.delayedCall(delay:Number, onComplete:Function)

тогда, если кто-то пропустит это, вы можете позвонить

TweenLite.killDelayedCallsTo(function:Function) 

который убивает исходный delayedCall.

очень легкий и мощный.

Надеюсь, это поможет, Джош.

person Josh    schedule 16.06.2009