Flash Lite 2 |
|||
| Flash Lite 2.x ActionScript リファレンスガイド > ActionScript 言語エレメント > グローバル関数 > setInterval 関数 | |||
setInterval(functionName: Object, interval: Number [, param1: Object, param2, ..., paramN]) : Number setInterval(objectName: Object, methodName: String, interval: Number [, param1: Object, param2, ..., paramN]) : Number
SWF ファイルの再生時に一定の間隔で関数、メソッド、またはオブジェクトを呼び出します。インターバル関数を使用して、データベースから変数を更新したり、時間表示を更新したりできます。
interval が SWF ファイルのフレームレートを超える場合は、画面の更新に伴う影響を最小限に抑えるために、インターバル関数は再生ヘッドがフレームに入ったときにのみ呼び出されます。
メモ : Flash Lite 2.0 では、インターバルが SWF ファイルのフレームレートより短い場合、このメソッドに渡されたインターバルは無視され、インターバル関数は、SWF ファイルのフレームレートの間隔でのみ呼び出されます。間隔が、SWF ファイルのフレームレートより長い場合、イベントは、間隔が経過した後の次のフレームで呼び出されます。
使用できるバージョン : ActionScript 1.0、Flash Lite 2.0
functionName: Object - 関数名または匿名関数への参照。
interval: Number - functionName パラメータまたは methodName パラメータに対する呼び出しの間隔 (ミリ秒)。
param: Object (オプション) - functionName パラメータまたは methodName パラメータに渡されるパラメータ。複数のパラメータはカンマで区切ります。param1,param2, ...,paramN
objectName: Object - methodName メソッドを含むオブジェクト。
methodName: String - objectName のメソッド。
Number - 間隔を識別するための整数。これを clearInterval() clearInterval() に渡して間隔をクリアします。
シンタックス 1 : 次の例では、1000 ミリ秒 (1 秒) ごとに匿名関数を呼び出します。
setInterval( function(){ trace("interval called"); }, 1000 );
シンタックス 2 : 次の例では、2 つのイベントハンドラを定義し、各イベントハンドラを呼び出します。最初の setInterval() の呼び出しが、trace() ステートメントを含む callback1() 関数を呼び出します。2 番目の setInterval() の呼び出しが、ストリング "interval called" をパラメータとして callback2() 関数に渡します。
function callback1() {
trace("interval called");
}
function callback2(arg) {
trace(arg);
}
setInterval( callback1, 1000 );
setInterval( callback2, 1000, "interval called" );
シンタックス 3 : 次の例では、オブジェクトのメソッドを使用します。オブジェクトに対して定義されたメソッドを呼び出す場合は、このシンタックスを使用する必要があります。
obj = new Object();
obj.interval = function() {
trace("interval function called");
}
setInterval( obj, "interval", 1000 );
obj2 = new Object();
obj2.interval = function(s) {
trace(s);
}
setInterval( obj2, "interval", 1000, "interval function called" );
オブジェクトのメソッドを呼び出すには、次の例に示すように、2 つ目の形式の setInterval() シンタックスを使用する必要があります。
setInterval( obj2, "interval", 1000, "interval function called" );
この関数を使用する場合は、SWF ファイルで使用するメモリに注意する必要があります。たとえば、SWF ファイルからムービークリップを削除した場合、SWF ファイル内で実行される setInterval() 関数は削除されません。次の例に示すように、setInterval() 関数の使用が終了するたびに、clearInterval() を使用してこの関数を削除してください。
// MovieClipLoader インスタンスのイベントリスナーオブジェクトを作成する
var listenerObjectbject = new Object();
listenerObject.onLoadInit = function(target_mc: MovieClip) {
trace("start interval");
/* after the target movie clip loaded, create a callback which executes
about every 1000 ms (1 second) and calls the intervalFunc function. */
target_mc.myInterval = setInterval(intervalFunc, 1000, target_mc);
};
function intervalFunc(target_mc) {
// インスタンス名および任意のテキストを示す簡単なメッセージを表示する
trace(target_mc+" has been loaded for "+getTimer()/1000+" seconds.");
/* when the target movie clip is clicked (and released) you clear the interval
and remove the movie clip. If you don't clear the interval before deleting
the movie clip, the function still calls itself every second even though the
movie clip instance is no longer present. */
target_mc.onRelease = function() {
trace("clear interval");
clearInterval(this.myInterval);
// ターゲットムービークリップを削除する
removeMovieClip(this);
};
}
var jpeg_mcl: MovieClipLoader = new MovieClipLoader();
jpeg_mcl.addListener(listenerObject);
jpeg_mcl.loadClip("http: //www.helpexamples.com/flash/images/image1.jpg",
this.createEmptyMovieClip("jpeg_mc", this.getNextHighestDepth()));
setInterval() をクラス内で使用する場合は、この関数を呼び出すときに this キーワードを使用していることを確認する必要があります。このキーワードを使用しないと、setInterval() 関数がクラスメンバーにアクセスできません。次に、このことを説明する例を示します。deleteUser_btn というボタンを含む FLA ファイルで、次の ActionScript をフレーム 1 に追加します。
var me: User = new User("Gary");
this.deleteUser_btn.onRelease = function() {
trace("Goodbye, "+me.username);
clearInterval(me.intervalID);
delete me;
};
次に、FLA ファイルと同じディレクトリに User.as というファイルを作成します。次の ActionScript を入力します。
class User {
var intervalID: Number;
var username: String;
function User(param_username: String) {
trace("Welcome, "+param_username);
this.username = param_username;
this.intervalID = setInterval(this, "traceUsername", 1000, this.username);
}
function traceUsername(str: String) {
trace(this.username+" is "+getTimer()/1000+" seconds old, happy birthday.");
}
}