Функция ожидания Action Script 2.0 - PullRequest
1 голос
/ 08 июня 2009

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

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

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

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

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

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

Ответы [ 5 ]

1 голос
/ 08 июня 2009

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

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

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

0 голосов
/ 16 июня 2009

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

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

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

TweenLite.killDelayedCallsTo(function:Function) 

, который убивает исходный отложенный звонок.

очень просто и мощно.

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

0 голосов
/ 09 июня 2009

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

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

Вот скрипт действий:

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
0 голосов
/ 09 июня 2009

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

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

setTimeOut( onContinue, 1000, "hello" );

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

0 голосов
/ 08 июня 2009

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

Для проверки номеров фреймов вы можете использовать: if (_root._currentFrame <17) </p>

...