Управление временными интервалами

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

При разработке приложений в Adobe Flash CS4 Professional у вас есть доступ к временной шкале, с помощью которой можно отслеживать покадровое выполнение приложения. Однако в «чистых» проектах ActionScript придется полагаться на другие механизмы счисления времени.

Циклы и таймеры

В некоторых языках программирования необходимо задавать собственные схемы счисления времени с помощью инструкций циклов типа for или do..while.

Инструкции циклов, как правило, работают с той скоростью, какую позволяет локальный компьютер, то есть на каких-то компьютерах приложения будут выполняться быстрее, на каких-то медленнее. Если приложению требуется постоянный временной интервал, его можно привязать к календарю или к часам. Во многих приложениях: играх, анимациях, счетчиках реального времени — требуются надежные механизмы отсчета, которые будут работать одинаково вне зависимости от компьютера.

Класс ActionScript 3.0 Timer предлагает для этого удачное решение. С помощью модели событий ActionScript 3.0 класс Timer отправляет событие таймера после достижения заданного временного интервала.

Класс Timer

Предпочтительный способ обработки функций в языке ActionScript 3.0 — использование класса Timer (flash.utils.Timer), с помощью которого можно отправлять события при достижении заданного интервала.

Для запуска таймера нужно сначала создать экземпляр класса Timer, который будет сообщать, как часто генерировать событие таймера и сколько раз это нужно делать.

Например, ниже показано, как создавать экземпляр Timer, который будет отправлять событие каждую секунду в течение 60 секунд:

var oneMinuteTimer:Timer = new Timer(1000, 60);

Объект Timer отправляет объект TimerEvent каждый раз при достижении заданного интервала. Тип события объекта TimerEvent — timer (определяется константой TimerEvent.TIMER). Объект TimerEvent содержит те же свойства, что и стандартный объект Event.

Если экземпляру Timer задано фиксированное число интервалов, он также отправит событие timerComplete (определяемое константой TimerEvent.TIMER_COMPLETE) при достижении завершающего интервала.

Вот образец небольшого приложения, в котором демонстрируется работа класса Timer:

package  
{ 
    import flash.display.Sprite; 
    import flash.events.TimerEvent; 
    import flash.utils.Timer; 
 
    public class ShortTimer extends Sprite 
    { 
        public function ShortTimer()  
        { 
            // creates a new five-second Timer 
            var minuteTimer:Timer = new Timer(1000, 5); 
             
            // designates listeners for the interval and completion events 
            minuteTimer.addEventListener(TimerEvent.TIMER, onTick); 
            minuteTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete); 
             
            // starts the timer ticking 
            minuteTimer.start(); 
        } 
 
        public function onTick(event:TimerEvent):void  
        { 
            // displays the tick count so far 
            // The target of this event is the Timer instance itself. 
            trace("tick " + event.target.currentCount); 
        } 
 
        public function onTimerComplete(event:TimerEvent):void 
        { 
            trace("Time's Up!"); 
        } 
    } 
}

При создании класса ShortTimer создается экземпляр Timer, который будет отсчитывать каждую секунду в течение пяти секунд. Затем к таймеру добавляются два прослушивателя, один из которых будет прослушивать секундные отметки, а второй — событие timerComplete.

Затем таймер начинает отсчет, и с этого момента метод onTick() выполняется с интервалом в одну секунду.

Метод onTick() просто выводит текущий счет секунд. По прошествии пяти секунд выполняется метод onTimerComplete(), сообщающий, что время вышло.

При выполнении этого примера у вас в консоли или окне трассировки должны отображаться следующие строки, по одной в секунду:

tick 1 
tick 2 
tick 3 
tick 4 
tick 5 
Time's Up!

Временные функции в пакете flash.utils

В языке ActionScript 3.0 есть несколько временных функций, схожих с функциями ActionScript 2.0. Это функции пакетного уровня в пакете flash.utils, и работают они точно так же, как и в ActionScript 2.0.

Функция

Описание

clearInterval(id:uint):void

Отменяет заданный вызов метода setInterval().

clearTimeout(id:uint):void

Отменяет указанный вызов setTimeout().

getTimer():int

Возвращает количество миллисекунд, прошедших с момента инициализации проигрывателя Adobe® Flash® или среды Adobe® AIR™.

setInterval(closure:Function, delay:Number, ... arguments):uint

Выполняет функцию с заданным интервалом (в миллисекундах).

setTimeout(closure:Function, delay:Number, ... arguments):uint

Выполняет указанную функцию с заданной задержкой (в миллисекундах).

Эти функции оставлены в языке ActionScript 3.0 в целях обратной совместимости. Компания Adobe не рекомендует использовать их во вновь разрабатываемых приложениях на ActionScript 3.0. В целом, использовать в приложениях класс Timer правильнее и удобнее.