- ベストアンサー
ActionScriptで指定した時間後に次のアクションのとり方
- ActionScriptで2秒後にフェードアウトするアニメーションを作りたい
- 現在は下から上にフェードインしながら画像を読み込むスクリプトまではできた
- しかし、次の2秒後にフェードアウトするという機能が欠けている
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 > // 関数 flgUp を定義 > function flgUp():Void { > // フラグのような変数に1を加算 > flg_num++; > // setInterval を削除 > clearInterval(myID); > } > --------------------------------------- > を定義しているところがよくわからないんですが、 setInterval の一般形は ID番号 = setInterval(関数名, 実行間隔[単位:ミリ秒]) です。 ですからその 「関数名」 にあたる部分を関数を定義しています。 もう少し細かく注釈を入れると次のようになります。 // 関数名 flgUp という関数を定義:戻り値なし function flgUp():Void { // フラグのような数値を入れる変数の値を1加算 flg_num++; // 定義した setInterval を削除 clearInterval(myID); } > 行動を切り替えるために上のような変数を作る必要があるからなんでしょか? そうですね。 ムービークリップ自体に書く onClipEvent (enterFrame) { } を使った場合, この { }内 は1フレーム進む時間ごとに毎回実行されます。 そのムービークリップが登場してから消えるまで。 厳密には登場した次のフレーム時間から消える寸前のフレーム時間まで毎回です。 onClipEvent (enterFrame) { } を解除することはできません。 解除する=ムービークリップを消す という手段しかありません。 ムービークリップを途中で消したりするわけには行きませんから, onClipEvent (enterFrame) { } の { }内 で色々な値の場合の動作を定義しています。
その他の回答 (1)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
書かれていらっしゃるスクリプトに付け足すとする場合で, なおかつ setInterval を使う場合は, 次のようになると思います。 ------------------------------------------------- onClipEvent (load) { // 数値を代入するフラグのような変数を初期化 var flg_num:Number = 0; // ---以下そのまま------ this.createEmptyMovieClip("img_load_mc", 1); img_load_mc.loadMovie("画像URL"); this._alpha = 0; this._x = 0; this._y = 100; // ---以上そのまま------ // 関数 flgUp を定義 function flgUp():Void { // フラグのような変数に1を加算 flg_num++; // setInterval を削除 clearInterval(myID); } } onClipEvent (enterFrame) { // // フラグのような変数の値が 0 であって if (flg_num == 0) { // なおかつ アルファ が 100 未満のとき if (this._alpha<100) { // アルファ を 5 ずつ加算 this._alpha += 5; // アルファ が 100 以上になれば } else { // アルファ を 100 で固定 this._alpha = 100; } // なおかつ y座標 が 0 より大きいとき if (this._y>0) { // y座標 を 5 ずつ減算 this._y -= 5; // y座標 が 0 以下になれば } else { // y座標 を 0 で固定 this._y = 0; // フラグのような変数の値を 1 にする flg_num = 1; // 2000ミリ秒後に 関数 flgUp を実行 var myID:Number = setInterval(flgUp, 2000); } // // フラグのような変数の値が 2 であるとき } else if (flg_num == 2) { // アルファ を 5 ずつ減算 this._alpha -= 5; } } ------------------------------------------------- 変数や関数の型指定をしているため, ActionScript 1.0 設定でのパブリッシュはできませんが, 概ね全体の形は Flash 5 形式のスクリプトです。 Flash 5 の次のバージョンである Flash MX 以上では ムービークリップ自体に書く onClipEvent (enterFrame) { } イベントハンドラ ではなく MovieClip.onEnterFrame = function() {} イベントハンドラメソッド が使えます。 これを使えば, 途中で EnterFrame を削除したり他の関数を実行するように切り替えることもできるので もっと柔軟にスクリプトが組めるかもしれません(フラグのような変数やif文などは不要になるかもしれません)。 さらに Flash Player 8 以上では, setInterval ではなく setTimeout が使えるので, この場合(単発実行するような場合)は,これを使った方が楽かもしれません。
補足
すごい丁寧に説明してくださってありがとうございます。 でちょっと質問なんですが、 ------------------------------------------------- // 数値を代入するフラグのような変数を初期化 var flg_num:Number = 0; と // 関数 flgUp を定義 function flgUp():Void { // フラグのような変数に1を加算 flg_num++; // setInterval を削除 clearInterval(myID); } ------------------------------------------------- を定義しているところがよくわからないんですが、 これは何を意味する変数なんでしょうか? 行動を切り替えるために上のような変数を作る必要があるからなんでしょか?
お礼
詳しい説明ありがとうございました。 以下のような変数を定義するのは、ある条件を判定するためで、プログラムの世界では、何かの条件を判定させるために変数を使うことは常套手段のようですね、うまく使いこなせるようにしたいです。 -------------------------------------------------------------- var flg_num:Number = 0; function flgUp():Void { // フラグのような数値を入れる変数の値を1加算 flg_num++; // 定義した setInterval を削除 clearInterval(myID); } --------------------------------------------------------------