ActionScript 3
타이머 작업
수색…
카운트 다운 타이머 예제
package {
import flash.events.TimerEvent;
import flash.utils.Timer;
public class CountdownTimer extends Timer {
public var time:Number = 0;
public function CountdownTimer(time:Number = Number.NEGATIVE_INFINITY, delay:Number = 1000) {
super(delay, repeatCount);
if (!isNaN(time))
this.time = time;
repeatCount = Math.ceil(time / delay);
addEventListener(TimerEvent.TIMER, timerHandler);
addEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler);
}
override public function start():void {
super.start();
}
protected function timerHandler(event:TimerEvent):void {
time -= delay;
}
protected function timerCompleteHandler(event:TimerEvent):void {
}
override public function stop():void {
super.stop();
}
public function dispose():void {
removeEventListener(TimerEvent.TIMER, timerHandler);
removeEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler);
}
}
}
이 CountdownTimer
는 Timer
확장하며 Timer
이 CountdownTimer
되는 것을 제외하고는 똑같은 방식으로 사용됩니다.
사용 예 :
var timer:CountdownTimer = new CountdownTimer(5000);
timer.addEventListener(TimerEvent.TIMER, timerHandler);
timer.addEventListener(TimerEvent.TIMER_COMPLETE, completeHandler);
timer.start();
function timerHandler(event:TimerEvent):void {
trace("Time remaining: " + event.target.time);
}
function completeHandler(event:TimerEvent):void {
trace("Timer complete");
}
위의 예는 다음과 같이 출력됩니다.
[trace] Time remaining: 4000
[trace] Time remaining: 3000
[trace] Time remaining: 2000
[trace] Time remaining: 1000
[trace] Time remaining: 0
[trace] Timer complete
간격 및 시간 제한
import flash.utils.*;
var intervalId:uint=setInterval(schroedingerCat,1000);
// execute a function once per second and gather interval ID
trace("Cat's been closed in the box.");
function schroedingerCat():void {
if (Math.random()<0.04) {
clearInterval(intervalId); // stop repeating by ID
trace("Cat's dead.");
return;
}
trace("Cat's still alive...");
}
var bombId:uint;
function plantBomb(seconds:Number):uint {
trace("The bomb has been planted, and will blow in "+seconds.toFixed(3)+" seconds!");
var id:uint=setTimeout(boom,seconds*1000); // parameter is in milliseconds
return id;
}
function defuseBomb(id:uint):void {
clearTimeout(id);
trace("Bomb with id",id,"defused!");
}
function boom():void {
trace("BOOM!");
}
setInterval()
은 지정된 간격만큼 비동기 적으로 반복되는 작업을 수행하는 데 사용됩니다. Internal Timer
객체가 사용되면 uint
유형의 반환 값은 내부 ID이므로 clearInterval()
을 호출하여 반복에 액세스하고 중지 할 수 있습니다. setTimeout()
및 clearTimeout()
도 비슷하게 작동하지만 제공된 함수에 대한 호출은 한 번만 수행됩니다. 두 개의 set 함수에 추가 인수를 제공 할 수 있으며,이 인수는 함수에 순서대로 전달됩니다. 인수의 수와 유형은 컴파일 타임에 검사되지 않으므로 이상한 조합의 인수 또는이를 필요로하는 함수를 제공하면 "오류 # 1063 : 인수 개수 불일치"오류가 발생합니다.
repeatCount
속성에는 0 또는 1을, 무한 반복에는 0을, 하나에는 1을 사용하여 일반 Timer
객체로 setInterval
및 setTimeout
의 두 가지 작업을 모두 수행 할 수 있습니다.
무작위 타이머 예제
package {
import flash.events.TimerEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;
public class RandomTimer extends Timer {
public var minimumDelay:Number;
public var maximumDelay:Number;
private var _count:uint = 0;
private var _repeatCount:int = 0;
public function RandomTimer(min:Number, max:Number, repeatCount:int = 0) {
super(delay, repeatCount);
minimumDelay = min;
maximumDelay = max;
_repeatCount = repeatCount;
}
override public function start():void {
delay = nextDelay();
addEventListener(TimerEvent.TIMER, timerHandler);
super.start();
}
private function nextDelay():Number {
return (minimumDelay + (Math.random() * (maximumDelay - minimumDelay)));
}
override public function stop():void {
removeEventListener(TimerEvent.TIMER, timerHandler);
super.stop();
}
protected function timerHandler(event:TimerEvent):void {
_count++;
if ((_repeatCount > 0) && (_count >= _repeatCount)) {
stop();
dispatchEvent(new TimerEvent(TimerEvent.TIMER_COMPLETE));
}
delay = nextDelay();
}
override public function reset():void {
_count = 0;
super.reset();
}
}
}
이 RandomTimer
는 Timer
확장하며, 무작위 간격으로 디스패치한다는 점을 제외하고는 똑같이 사용됩니다.
예제 사용법, 무작위로 1 초에서 5 초 사이에 발송 :
var t:int = getTimer();
var timer:RandomTimer = new RandomTimer(1000, 5000);
timer.addEventListener(TimerEvent.TIMER, timerHandler);
timer.start();
function timerHandler(event:TimerEvent):void {
trace("Time since last dispatch: " + (getTimer() - t));
t = getTimer();
}
위의 예는 다음과 같이 출력됩니다.
[trace] Time since last dispatch: 1374
[trace] Time since last dispatch: 2459
[trace] Time since last dispatch: 3582
[trace] Time since last dispatch: 1335
[trace] Time since last dispatch: 4249
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow