Flash CS4 Professional ActionScript 2.0

setInterval 関数

setInterval(functionReference:Function, interval:Number, [param1:Object, param2, ..., paramN]) : Number
setInterval(objectReference:Object, methodName:String, interval:Number, [param1:Object, param2, ..., paramN]) : Number

SWF ファイルの再生時に一定の間隔で関数、またはオブジェクトのメソッドを呼び出します。setInterval() を使用すると、任意の関数を一定の間隔で繰り返し実行できます。

setInterval() を使用するためのヒントを次に示します。

  • 呼び出されている関数のスコープを識別します。
  • インターバル ID (setInterval() の戻り値) が設定されたスコープを識別します。
  • 前に設定した間隔をクリアしてから、新しい間隔を設定します。

これらのヒントについて、以下で詳しく説明します。

呼び出されている関数のスコープを識別します。呼び出される関数のスコープを識別するには、setInterval() メソッドが実行できるオブジェクト (オブジェクトスコープ) を最初のパラメータとして渡し、実行するメソッドの名前を 2 番目のパラメータとして渡します (2 つ目のシグネチャで示す)。これによって、目的のメソッドが、渡されたオブジェクト参照スコープから実行されます。メソッドは、このような方法で実行されると、オブジェクト上のメンバー変数を this キーワードを使用して参照できます。

インターバル ID が設定されたスコープを識別します。インターバル ID (intervalId) が設定されたスコープを識別するには、setInterval() に渡すオブジェクトスコープ上のメンバー変数にこの ID を代入します。これによって、呼び出された関数が this.intervalId でインターバル ID を見つけることができます。

前に設定した間隔をクリアします。前に設定した間隔をクリアしてから新しい間隔を設定するには、通常、setInterval() を呼び出す "前" に、clearInterval() を必ず呼び出す必要があります。これによって、現在実行されている間隔への唯一の参照である intervalId 変数の上書きや破棄を回避できます。setInterval() を呼び出す前に clearInterval() を呼び出すには、例に示しているように、開始スクリプトと実行スクリプトの両方が intervalId にアクセスする必要があります。

メモ: スクリプトでループ処理を停止するには、必ず clearInterval() を呼び出してください。

対応バージョン : ActionScript 1.0、Flash Player 6

パラメータ

functionReference:Function - 呼び出される関数への参照。

interval:Number - functionReference または methodName 関数に対する呼び出しの間隔 (ミリ秒)。

interval が SWF ファイルのフレームレート (たとえば 10 フレーム/秒 [fps] の場合は 100 ミリ秒の間隔) より短い場合、インターバル関数は interval にできるだけ近い間隔で呼び出されます。呼び出す間隔にメモリに負荷のかかる長いスクリプトを実行すると、呼び出しの遅延が発生します。呼び出された関数によりビジュアルエレメントに変更が加えられる場合は、updateAfterEvent() 関数を使用して、十分な画面更新回数を確保する必要があります。interval が SWF ファイルのフレームレートより長い場合は、画面の更新に伴う影響を最小限に抑えるために、interval が経過し、しかも再生ヘッドが次のフレームに入った後にのみ、インターバル関数が呼び出されます。

param:Object (オプション) - functionReference または methodName に送られた関数に渡すパラメータ。複数のパラメータは、次のようにカンマで区切ります。param1 , param2 , ..., paramN

objectReference:Object - methodName で指定したメソッドを含むオブジェクト。

methodName:String - objectReference で指定したオブジェクトのスコープ内に存在するメソッド。

戻り値

Number - 間隔を識別するための整数 (インターバル ID)。これを clearInterval() に渡して間隔をクリアします。

例 1 : 次の例では、メッセージを 20 ミリ秒間隔で最大 10 回出力した後、この間隔をクリアします。オブジェクトスコープ this が最初のパラメータとして渡され、メソッド名 executeCallback が 2 番目のパラメータとして渡されます。これによって、executeCallback() は、呼び出し元のスクリプトと同じスコープから実行されるようになります。


var intervalId:Number;
var count:Number = 0;
var maxCount:Number = 10;
var duration:Number = 20;

function executeCallback():Void {
 trace("executeCallback intervalId: " + intervalId + " count: " + count);
 if(count >= maxCount) {
 clearInterval(intervalId);
 } 
 count++;
}

intervalId = setInterval(this, "executeCallback", duration);


例 2 : 次の例は最初の例と似ていますが、setInterval() の前に clearInterval() を呼び出している点が異なります。これによって、不要なループを避けることができます。このことは、特定の間隔がクリアされるまで開始スクリプトを何度でも実行できる、イベントベースのシステムでは特に重要となります。


var intervalId:Number;
var count:Number = 0;
var maxCount:Number = 10;
var duration:Number = 20;

function executeCallback():Void {
 trace("executeCallback intervalId: " + intervalId + " count: " + count);
 if(count >= maxCount) {
 clearInterval(intervalId);
 }
 count++;
}

function beginInterval():Void {
 if(intervalId != null) {
 trace("clearInterval");
 clearInterval(intervalId);
 }
 intervalId = setInterval(this, "executeCallback", duration);
}

beginInterval();
beginInterval();
beginInterval();


例 3 : 次の例では、呼び出される関数にカスタム引数を渡す方法を示します。


var intervalId:Number;
var count:Number = 0;
var maxCount:Number = 10;
var duration:Number = 20;
var colors:Array = new Array("red", 
 "blue", 
 "yellow", 
 "purple", 
 "green", 
 "orange", 
 "salmon", 
 "pink", 
 "lilac", 
 "powder blue", 
 "mint");

function executeCallback(param:String) {
 trace("executeCallback intervalId: " + intervalId + " count: " + count + " param: " + param);
 clearInterval(intervalId);
 if(count < maxCount) {
 count++;
 intervalId = setInterval(this, "executeCallback", duration, colors[count]);
 }
}

if(intervalId != null) {
 clearInterval(intervalId);
}

intervalId = setInterval(this, "executeCallback", duration, colors[count]);


例 4 : 次の例では、setInterval() を ActionScript 2.0 カスタムクラスから適切に使用する方法を示します。前の例と同様、thissetInterval() 関数に渡して、呼び出されるメソッドが適切なスコープ内で確実に実行されるようにしています。


class CustomClass {
 private var intervalId:Number;
 private var count:Number = 0;
 private var maxCount:Number = 10;
 private var duration:Number = 20;

 public function CustomClass():Void {
 beginInterval();
 }

 private function beginInterval():Void {
 if(intervalId != null) {
 trace("clearInterval");
 clearInterval(intervalId);
 }
 intervalId = setInterval(this, "executeCallback", duration);
 }

 public function executeCallback():Void {
 trace("executeCallback intervalId: " + intervalId + " count: " + count);
 if(count >= maxCount) {
 clearInterval(intervalId);
 }
 count++;
 }
}


新規ドキュメントで、新しいクラスの新しいインスタンスをインスタンス化します。


var custom:CustomClass = new CustomClass();


関連項目

clearInterval 関数, updateAfterEvent 関数, class ステートメント