Timer クラス (livedocs@lab) は一定の間隔毎に処理を行いたい場合に使用します。Timer のインスタンスは、予め設定された時間が経つとイベントをディスパッチします。
Timer クラスは AS2 の setInterval() / getInterval() を置き換えるものです。AS3 でも setInterval() / getInterval() は共に flash.util パッケージ下にあり使用可能ですが、これは既存のコードとの互換性を持たせるためと考えるのがよさそうです。
Timer を使用するには、まずインスタンスを作成します。コンストラクタの引数にはイベントまでの待ち時間をミリ秒単位で指定します。
var myTimer:Timer = new Timer(1000);
次に、指定時間後に呼び出されるイベントハンドラを登録してから start() メソッドを呼びます。イベント名は timer です。経過時間のカウントは start() が呼ばれるまで開始されません。
myTimer.addEventListener("timer", timerHandler); myTimer.start(); private function timerHandler(event:TimerEvent):void { // ここに必要な処理を記述 trace(event.toString()); }
インスタンス生成後でも delay 属性の値を代入することで待ち時間を変えることが可能です。
コンストラクタの第二引数には、イベント発生を繰り返す回数を指定することができます。デフォルト値は 0 です。0 は無限に繰り返すという意味になります。
// 1 秒間隔で 2 回イベントを発生する var myTimer:Timer = new Timer(1000, 2);
繰り返しの回数も repeatCount 属性から設定可能です。現在までの繰り返し回数は currentCount 属性から参照できます(こっちは参照のみです)。 設定された回数分だけ繰り返したら timerComplete イベントがディスパッチされ、Timer は停止します。ちなみに Timer が実行中かどうかは running 属性で判断することができます。
var myTimer:Timer = new Timer(1000); myTimer.repeatCount = 2; myTimer.addEventListener("timerComplete", timerCompleteHandler); myTimer.start(); private function timerCompleteHandler(event:TimerEvent):void { trace("timer complete handler called"); }
stop() メソッドと reset() メソッド
stop() メソッドを使うと Timer を一旦中断することができます。その後 start() を呼ぶと残りの回数分 Timer が実行されます。
var myTimer:Timer = new Timer(1000, 2); myTimer.addEventListener("timer", timerHandler); myTimer.start(); private function timerHandler(event:TimerEvent):void { myTimer.stop(); trace(myTimer.running); // false が出力される myTimer.start(); }
reset() メソッドを使うと Timer の処理を停止し currentCount を 0 に戻します。 従って下記のサンプルは無限にイベントが繰り返されます。
var myTimer:Timer = new Timer(1000, 2); myTimer.addEventListener("timer", timerHandler); myTimer.start(); private function timerHandler(event:TimerEvent):void { myTimer.reset(); trace(myTimer.currentCount); // 0 が出力される myTimer.start(); }
コメントする