タイマー間隔の制御

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

サブトピック

ループとタイマーの違い
Timer クラス
flash.utils パッケージに含まれるタイマー制御関数

ループとタイマーの違い

プログラミング言語によっては、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() 
        {
            // 5 秒の Timer を新規作成する
            var minuteTimer:Timer = new Timer(1000, 5);
            
            // 時間間隔イベントおよび完了イベント用のリスナーを指定する
            minuteTimer.addEventListener(TimerEvent.TIMER, onTick);
            minuteTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
            
            // タイマーのカウントを開始する
            minuteTimer.start();
        }

        public function onTick(event:TimerEvent):void 
        {
            // 現在のカウントを表示する
            // このイベントのターゲットは、該当する Timer インスタンス自体である
            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 が初期化された時点からの経過ミリ秒数を返します。

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

ミリ秒単位で指定した間隔ごとに関数を実行します。

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

ミリ秒単位で指定した遅延時間の経過後に、指定した関数を実行します。

これらの関数は、後方互換性を維持する目的で ActionScript 3.0 にも残されているものです。新しい ActionScript 3.0 アプリケーションで使用することはお勧めしません。一般に、Timer クラスを使用するほうが容易さの点でも効率の点でも有利です。


 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000074.html