Как остановить выполнение в ActionScript

есть ли способ остановить выполнение в ActionScript, например метод sleep ()?

Я знаю, что есть метод setTimeout (), но setTimeout () просто настраивает событие для отложенного выполнения.

4 ответов


нет. Нет никакого сна. Извиняюсь.

см. мой ответ здесь для опций:ActionScript: нажатие закрытия в стек событий?. Это не говорит о сне, но я попытался дать обзор отложенного вызова функции.


вам нужно думать в терминах не спать. Actionscript - это не тот язык. Поскольку flash player чередуется между отрисовкой кадров и выполнением кода, спящий режим в коде всегда плохая идея, поэтому нет никакого метода, чтобы сделать это.


нет способа приостановить все выполнение приложения, как в PHP, но есть обходные пути (если вы не установили точку останова или не создали ошибку времени выполнения специально, не думайте, что это то, что вы имели в виду). Вероятно, это связано с тем, что обычно flash-приложения предназначены для выполнения всех сценариев менее чем за один "кадр".

обычно можно "приостановить" анимацию веб-сайта, когда пользователь расфокусирует его. Это можно сделать, прослушав событие.Деактивировать, а затем удалить ENTER_FRAME слушатель и убить все текущие процессы.

вы также можете создать центральный EventDispatcher для замены внутреннего ENTER_FRAME, таким образом, вы легко контролируете скорость выполнения, а также приостановку / возобновление (не прекратит выполнение скриптов, ни асинхронных обработчиков, таких как загрузчики и т. д. хотя.)


Да, есть, хотя имейте в виду 15-секундный тайм-аут сценария. (Вы можете изменить этот 15-секундный тайм-аут сценария в настройках публикации... )

Я обнаружил в прошлом, что если вы ищете эту функциональность, вы делаете что-то неправильно :)

все, что вы пытаетесь выполнить, вероятно, вызывает прослушиватель событий.

//adding this ENTER_FRAME event listener just to show that the script pauses for one
// second before the first frame executes
addEventListener( Event.ENTER_FRAME, onFrame );

function onFrame( event:Event ):void {

    trace( "first frame occurs after pause of", getTimer() + " ms" );
    removeEventListener( Event.ENTER_FRAME, onFrame );

};

var startTime:int = getTimer();
var pauseTime:int = 1000;

while( ( getTimer() - startTime ) < pauseTime ) {
    //do nothing... we're effectively pausing here...
}