タイマー間隔の制御
Flash Adobe Flash CS3 Professional によるアプリケーション開発の場合は、タイムラインを使用してアプリケーションの進行をフレーム単位で確実に制御できますが、ActionScript だけを使用するプロジェクトの場合は、別のタイミング制御メカニズムを使用する必要があります。
サブトピック
ループとタイマーの違い
Timer クラス
flash.utils パッケージに含まれるタイマー制御関数
ループとタイマーの違い
プログラミング言語によっては、for や do..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!
リンク
参照元