Действие Script Функция сна

Имеет ли ActionScript 2.0/3.0 эквивалент С# sleep()?

Ответ 1

Не совсем. Вы можете заблокировать (почти все) выполнение кода с помощью чего-то вроде:

function sleep(ms:int):void {
    var init:int = getTimer();
    while(true) {
        if(getTimer() - init >= ms) {
            break;
        }
    }
}

trace("hello");
trace(getTimer());
sleep(5000);
trace("bye");
trace(getTimer());

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

Если вы просто хотите отложить выполнение фрагмента кода, вы можете использовать объект Timer или функцию setTimeout. Тем не менее, это будет неблокировать, поэтому вам придется использовать какой-то флаг, например, предлагаемый TandemAdam. В лучшем случае это будет хрупким.

Возможно, есть более эффективный подход к вашей проблеме, но неясно, что вы пытаетесь выполнить в своем вопросе.

Ответ 2

Вы можете реализовать функцию sleep следующим образом:

function sleep(counter: int, subsequentFunction: Function, args: Array): void
{
    if (counter > 0)
        callLater(sleep, [counter - 1, subsequentFunction, args]);
    else
        callLater(subsequentFunction, args);
}

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

// call trace('Hello') after 100 cycles
sleep(100, trace, ['Hello']);
// call myFunction() after 50 cycles
sleep(50, myFunction, []);

Преимущество такого подхода заключается в том, что пользовательский интерфейс все еще реагирует во время сна.

Ответ 3

Нет ActionScript/Flash Player не имеет эквивалента функции С# sleep. Во-первых, Flash не использует несколько потоков.

Вам нужно будет реализовать функциональность вручную.

Вы можете использовать логический флаг, который будет выполняться только тогда, когда true. Затем используйте Timer class для задержки.