タイマー間隔の制御

Flash Player 9 以降、Adobe AIR 1.0 以降

Adobe Flash CS4 Professional によるアプリケーション開発の場合は、タイムラインを使用してアプリケーションの進行をフレーム単位で確実に制御できますが、 ActionScript だけを使用するプロジェクトの場合は、別のタイミング制御メカニズムを使用する必要があります。

ループとタイマーの違い

プログラミング言語によっては、fordo..while.

一般にループステートメントは、動作環境となるローカルマシンの処理速度に応じてなるべく高速に実行されるため、使用するマシンによって速度に違いが生じます。 アプリケーションを一定のタイミングで動作させるには、何らかのカレンダーやクロックによって生成されるタイミングを利用する必要があります。 ゲーム、アニメーション、およびリアルタイム制御など、多くのアプリケーションは、どのマシンでも一貫して利用できる、安定した時間ベースのタイミングメカニズムを必要とします。

ActionScript 3.0 の Timer クラスには、こうしたニーズを満たす強力な機能があります。 Timer クラスでは ActionScript 3.0 のイベントモデルを使用し、指定された時間間隔が経過するごとにタイマーイベントを送出します。

Timer クラス

タイマー制御関数の扱いについて、ActionScript 3.0 では Timer クラス(flash.utils.Timer)を使用する方法が推奨されています。このクラスを使用すると、所定の時間間隔が経過するたびにイベントを送出することができます。

タイマーを開始するには、最初に Timer クラスのインスタンスを作成し、そのインスタンスに対して、タイマーイベントを生成する頻度と生成終了までの送出回数を指定します。

例えば次のコードでは、1 秒ごとのイベント送出を 60 秒間続けるタイマーインスタンスを作成します。

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

Timer オブジェクトでは、所定の時間間隔が経過するたびに TimerEvent オブジェクトを送出します。 TimerEvent オブジェクトのイベント型は timer(定数 TimerEvent.TIMER によって定義される)です。TimerEvent オブジェクトには、標準の Event オブジェクトと同じプロパティが格納されます。

また、繰り返しの回数が固定されたタイマーインスタンスの場合、最後の時間間隔に到達したときに 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 クラスが作成されたとき、1 秒ごとのカウントを 5 秒間続ける Timer インスタンスを作成します。 次に、このタイマー用のリスナーを 2 つ指定しています。1 つはカウント各回のイベントを受け取るリスナーであり、もう 1 つは timerComplete イベントを受け取るリスナーです。

その後、タイマーのカウントを開始すると、以後は 1 秒間隔で onTick() メソッドが繰り返し呼び出されます。

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 クラスを使用する方が容易さの点でも効率の点でも有利です。