시간 간격 제어

Flash Player 9 이상, Adobe AIR 1.0 이상

Adobe Flash CS4 Professional을 사용하여 응용 프로그램을 개발할 때는 응용 프로그램의 일정한 프레임 단위 진행을 가능하게 하는 타임라인을 사용할 수 있습니다. 하지만 ActionScript 프로젝트만 진행하는 경우에는 다른 시간 메커니즘을 사용해야 합니다.

루프와 타이머

일부 프로그래밍 언어에서는 for 또는 do..while 과 같은 루프 문을 사용하여 고유한 시간 체계를 고안해야 합니다.

일반적으로 루프 명령문은 로컬 시스템 성능에 따라 실행 속도가 달라지므로, 이에 따라 일부 시스템에서는 응용 프로그램이 빠르게 실행되지만 다른 시스템에서는 느리게 실행될 수 있습니다. 응용 프로그램에 일정한 시간 간격이 필요하면 실제 달력이나 시계를 연결해야 합니다. 게임, 애니메이션, 실시간 컨트롤러 등의 많은 응용 프로그램에는 시스템 모두에 일관되게 적용되는 규칙적인 시간 기반 티킹(ticking) 메커니즘이 필요합니다.

ActionScript 3.0 Timer 클래스는 매우 강력한 솔루션을 제공합니다. ActionScript 3.0 이벤트 모델을 사용하여, Timer 클래스는 지정된 시간 간격에 도달할 때마다 타이머 이벤트를 전달합니다.

Timer 클래스

ActionScript 3.0에서 시간 함수를 처리하는 좋은 방법은 지정된 시간 간격에 도달할 때마다 이벤트를 전달하는 Timer 클래스(flash.utils.Timer)를 사용하는 것입니다.

타이머를 시작하려면 먼저 Timer 클래스의 인스턴스를 생성하여 타이머 이벤트 생성 빈도 및 중단 시까지의 생성 횟수를 지정합니다.

예를 들어, 다음 코드는 매 초마다 이벤트를 전달하고 이 작업을 60초 동안 계속하는 Timer 인스턴스를 생성합니다.

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 클래스를 생성하면 5초 동안 1초에 한 번 작동하는 Timer 인스턴스가 생성됩니다. 그런 다음 타이머에 두 개의 리스너를 추가하여 하나는 각 틱(tick)을 수신하고 다른 하나는 timerComplete 이벤트를 수신하도록 합니다.

그러면 타이머 티킹이 시작되어 그 시점 이후부터 onTick() 메서드가 1초 간격으로 실행됩니다.

onTick() 메서드는 단순히 현재의 틱 카운트를 표시합니다. 5초가 지난 후에는 onTimerComplete() 메서드가 실행되어 시간이 종료되었음을 알립니다.

이 샘플을 실행하면 다음과 같은 행이 콘솔이나 추적 윈도우에 1초에 한 행씩 나타나는 것을 볼 수 있습니다.

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® Player 또는 Adobe® AIR™를 초기화한 이후 경과된 밀리초 수를 반환합니다.

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

지정된 밀리초 단위 간격으로 함수를 실행합니다.

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

밀리초 단위로 지정된 지연 시간 후 지정된 함수를 실행합니다.

이러한 함수는 이전 버전과의 역호환성을 위해 ActionScript 3.0에 남아 있습니다. 하지만 새 ActionScript 3.0 응용 프로그램에는 이러한 함수를 사용하지 않는 것이 좋습니다. 일반적으로 응용 프로그램에 Timer 클래스를 사용하는 것이 보다 쉽고 효율적입니다.