タイマーについて
一定時間経過後に、任意の関数を実行する(Flash 8 以降)
■一定時間経過後に、任意の関数を実行する
一定時間経過後に、任意の関数を1回だけ実行するには、setTimeout() 関数を使用します。
この関数は非同期実行です。
すぐに制御が返り、プログラムは動き続けます。
中止したい場合は、clearTimeout() 関数を使用します。
setTimeout( 関数 , 時間 , データ ... ) :Number
第01引数 | Function | 実行したいコールバック関数を指定。 |
第02引数 | Number | コールバック関数を実行するまでに待機する時間を指定(単位:ミリ秒) |
可変引数(略可) | * | コールバック関数の引数に、任意のデータを渡したい場合に指定。 |
戻り値 | Number | ハンドル値が得られる。 |
■第02引数(待機する時間)
コールバック関数が実行されるまでに、待機する時間をミリ秒で指定します。
必ずしも、指定した時間経過後に実行されるとは限りません。
また、Flash Player 10.1 以降から、タイマー周波数の上限が、約 60 fps になりました。
よって、約 16 ミリ秒が最短となります。
公式リファレンスでは、20 ミリ秒未満の指定は、非推奨となっています。
■使用例
5000 ミリ秒経過後に,関数を実行する
// ------------------------------------------------------------
// 一定時間経過後に実行される関数
// ------------------------------------------------------------
function TimeoutFunc(){
trace("実行された");
}
// ------------------------------------------------------------
// 5000 ミリ秒経過後に、関数を実行する
// ------------------------------------------------------------
var timeout_id = setTimeout(TimeoutFunc , 5000);
第03引数の動作を確認する
// ------------------------------------------------------------
// 一定時間経過後に実行される関数
// ------------------------------------------------------------
function TimeoutFunc(argument1,argument2,argument3){
// 出力テスト
trace(argument1); // false
trace(argument2); // 123
trace(argument3); // "あいう"
trace(arguments);
}
// ------------------------------------------------------------
// 1000 ミリ秒経過後に、関数を実行する
// ------------------------------------------------------------
var timeout_id = setTimeout(TimeoutFunc , 1000 , false , 123 , "あいう");
■setTimeout() 関数の動作をキャンセルする
setTimeout() 関数の動作をキャンセルするには、clearTimeout() 関数を使用します。
clearTimeout( ハンドル値 ) :Void
第01引数 | Number | setTimeout() 関数で得られたハンドル値を指定。 |
戻り値 | Void | なし。 |
setTimeout() 関数のタイマー動作をキャンセルする
// ------------------------------------------------------------
// 変数
// ------------------------------------------------------------
var timeout_id = null;
// ------------------------------------------------------------
// 5000 ミリ秒経過後に、関数を実行する
// ------------------------------------------------------------
timeout_id = setTimeout(function (){
trace("実行された");
} , 5000);
// ------------------------------------------------------------
// タイマーを停止する
// ------------------------------------------------------------
if(timeout_id !== null){
// setTimeout() 関数の動作をキャンセルする
clearTimeout(timeout_id);
timeout_id = null;
}
一定の時間間隔で、任意の関数を実行する(Flash 6 以降)
■一定の時間間隔で、任意の関数を実行する
一定の時間間隔で、任意の関数を繰り返し実行するには、setInterval() 関数を使用します。
この関数は非同期実行です。
すぐに制御が返り、プログラムは動き続けます。
中止したい場合は、clearInterval() 関数を使用します。
setInterval( 関数 , 時間隔 , データ ... ) :Number
第01引数 | Function | 実行したいコールバック関数を指定。 |
第02引数 | Number | 関数を繰り返し実行するための時間隔を指定。(単位:ミリ秒) |
可変引数(略可) | * | コールバック関数の引数に、任意のデータを渡したい場合に指定。 |
戻り値 | Number | ハンドル値が得られる。 |
setInterval( オブジェクト , "メソッド名" , 時間隔 , データ ... ) :Number
第01引数 | Object | オブジェクトを指定。 |
第02引数 | String | 実行したいメソッドの名前を指定。(メソッドはオブジェクトに組み込む) |
第03引数 | Number | 関数を繰り返し実行するための時間隔を指定。(単位:ミリ秒) |
可変引数(略可) | * | コールバック関数の引数に、任意のデータを渡したい場合に指定。 |
戻り値 | Number | ハンドル値が得られる。 |
■実行タイミングについて
必ずしも、指定した時間隔で実行されるとは限りません。
また、Flash Player 10.1 以降から、タイマー周波数の上限が、約 60 fps になりました。
よって、約 16 ミリ秒が最短となります。
公式リファレンスでは、20 ミリ秒未満の指定は、非推奨となっています。
■使用例
5000 ミリ秒の時間隔で関数を実行する
// ------------------------------------------------------------
// 一定時間隔で、繰り返し実行される関数
// ------------------------------------------------------------
function IntervalFunc(){
trace("実行された");
}
// ------------------------------------------------------------
// 5000 ミリ秒の時間隔で関数を実行する
// ------------------------------------------------------------
var interval_id = setInterval(IntervalFunc , 5000);
1000 ミリ秒の時間隔でメソッドを実行する
// ------------------------------------------------------------
// MyFunc コンストラクタ
// ------------------------------------------------------------
function MyFunc (){
// ------------------------------------------------------------
// ローカル変数を宣言(プライベートな変数)
// ------------------------------------------------------------
var count = 0;
// ------------------------------------------------------------
// 公開メソッド
// ------------------------------------------------------------
this.execute = function(){
trace("実行された:" + count);
count ++;
};
}
// ------------------------------------------------------------
// MyFunc オブジェクトを作成する
// ------------------------------------------------------------
var obj = new MyFunc();
// ------------------------------------------------------------
// 1000 ミリ秒の時間隔でメソッドを実行する
// ------------------------------------------------------------
var interval_id = setInterval(obj , "execute" , 1000);
可変引数の動作を確認する
// ------------------------------------------------------------
// 一定時間経過後に実行される関数
// ------------------------------------------------------------
function IntervalFunc(argument1,argument2,argument3){
// 出力テスト
trace(argument1); // false
trace(argument2); // 123
trace(argument3); // "あいう"
trace(arguments);
}
// ------------------------------------------------------------
// 1000 ミリ秒経過後に、関数を実行する
// ------------------------------------------------------------
var interval_id = setInterval(IntervalFunc , 1000 , false , 123 , "あいう");
■setInterval() 関数の動作をキャンセルする
setInterval() 関数の動作をキャンセルするには、clearInterval() 関数を使用します。
clearInterval( ハンドル値 ) :Void
第01引数 | Number | setInterval() 関数で得られたハンドル値を指定。 |
戻り値 | Void | なし。 |
setInterval() 関数のタイマー動作をキャンセルする
// ------------------------------------------------------------
// 変数
// ------------------------------------------------------------
var interval_id = null;
// ------------------------------------------------------------
// 5000 ミリ秒の時間隔で関数を実行する
// ------------------------------------------------------------
interval_id = setInterval(function (){
trace("実行された");
} , 5000);
// ------------------------------------------------------------
// タイマーを停止する
// ------------------------------------------------------------
if(interval_id !== null){
// setInterval() 関数の動作をキャンセルする
clearInterval(interval_id);
interval_id = null;
}
■setInterval() 関数の再描画について
setInterval() 関数の実行タイミングは、フレームレートの更新間隔とは異なります。
再描画が発生しない事に注意して下さい。
例えば、コールバック関数内から、ムービークリップを操作してもすぐに画面に反映されません。
実際の描画は、次のフレームの更新タイミングで行われます。
手動的に再描画したい場合は、updateAfterEvent() 関数を使用します。
ムービークリップ mc を円のように移動させる
// ------------------------------------------------------------
// 初期化
// ------------------------------------------------------------
var px = 200; // 円の中心 x 座標
var py = 150; // 円の中心 y 座標
var rot = 0; // 円の角度(0 ~ 360)
var rot_speed = 1; // 円の角度変化量(0 ~ 360)
var radius = 30; // 円の半径
// ------------------------------------------------------------
// 0 ミリ秒の時間隔で関数を実行する
// ------------------------------------------------------------
setInterval(function (){
// 角度を変化させる
rot += rot_speed;
// 角度からラジアンに返還する
var rad = rot * Math.PI / 180;
var x = px + Math.cos(rad) * radius;
var y = py + Math.sin(rad) * radius;
// 座標をインスタンスの座標に反映
mc._x = x;
mc._y = y;
// 再描画を行う
updateAfterEvent();
} , 0);
フレーム更新時に、任意の関数を実行する
■エンターフレームイベントについて
エンターフレームイベントを使用すると、Flash Player に設定したフレームレートの時間隔で、任意の関数を実行する事ができます。
エンタフレームイベントの発火のタイミングは、フレームの更新と一致します。
すなわち、Flash Player の再描画タイミングと一致します。
ムービークリップの制御や、描画に関する処理は、エンターフレームイベント内で処理した方が効率がいいでしょう。
Flash Player の再描画タイミングを、動的に増やしたい場合は、setInterval() 関数を駆使すると実現できます。
■ onClipEvent ハンドラの enterFrame イベント
毎フレームごとに、任意の関数を繰り返し実行するには、onClipEvent ハンドラの enterFrame イベントを使用します。
タイムラインに配置した、任意のムービークリップを選択してから、スクリプトを記述します。
毎フレームごとに、繰り返し実行されるイベント
// ------------------------------------------------------------
// 毎フレームごとに、繰り返し実行されるイベント
// ------------------------------------------------------------
onClipEvent (enterFrame) {
trace("実行された");
}
■ MovieClip クラスの onEnterFrame イベント (Flash 6 以降)
毎フレームごとに、任意の関数を繰り返し実行するには、onEnterFrame イベントを使用します。
onEnterFrame イベントハンドラは、MovieClip にのみ存在します。
毎フレームごとに、繰り返し実行されるイベント (Flash 6 以降)
// ------------------------------------------------------------
// 空のムービークリップを作成する
// ------------------------------------------------------------
var mc = _root.createEmptyMovieClip("empty",0);
// ------------------------------------------------------------
// 毎フレームごとに、繰り返し実行されるイベント
// ------------------------------------------------------------
mc.onEnterFrame = function () {
trace("実行された");
};
■イベントのリッスンを終了する
イベントのリッスンを終了するには、null 値をセットします。
イベントハンドラのリッスンを止める (Flash 6 以降)
// ------------------------------------------------------------
// 空のムービークリップを作成する
// ------------------------------------------------------------
var mc = _root.createEmptyMovieClip("empty",0);
// ------------------------------------------------------------
// 毎フレームごとに、繰り返し実行されるイベント
// ------------------------------------------------------------
mc.onEnterFrame = function () {
trace("実行された");
};
// ------------------------------------------------------------
// onEnterFrame イベントのリッスンを止める
// ------------------------------------------------------------
mc.onEnterFrame = null;