こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ActionScriptで、指定した時間後に次のアクションのとり方

例えば2秒後に次の行動を取りたい時の質問をしたいのですが、
ある画像を下からフェードインしながら現れて、停止し2秒後にフェードアウトするというアニメーションをActionnScriptで作りたいのですが、
現在は下記のようにスクリプトを組んで、下から上にフェードインしながら画像を読み込むところまではできたのですが次の2秒後にフェードアウトするというのができません。

setIntervalを使うといいのは知っているのですが、それを下記のスクリプトにどのように組んだらできるのでしょうか?
わかる方がいたら教えてください、よろしくお願いします。

swfのサイズはw:300、h:100です、ステージにMovieClipを一つ置いてそれに下記のスクリプトを書き込んでいます。
-------------------------------------------------------------------
onClipEvent (load) {
this.createEmptyMovieClip("img_load_mc",1);
img_load_mc.loadMovie("画像URL");
this._alpha = 0;
this._x = 0;
this._y = 100;
}

onClipEvent (enterFrame) {
this._alpha += 5;
this._y -= 5;

if(this._y <0) {
this._y = 0;
}
}
-------------------------------------------------------------------

ちなみに作成環境はFlash8 ProでActionScript2.0で作成しています。
よろしくお願いします。

投稿日時 - 2009-10-07 12:49:00

QNo.5348579

すぐに回答ほしいです

質問者が選んだベストアンサー

#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) { } の { }内 で色々な値の場合の動作を定義しています。

投稿日時 - 2009-10-12 07:01:17

お礼

詳しい説明ありがとうございました。
以下のような変数を定義するのは、ある条件を判定するためで、プログラムの世界では、何かの条件を判定させるために変数を使うことは常套手段のようですね、うまく使いこなせるようにしたいです。
--------------------------------------------------------------
var flg_num:Number = 0;

function flgUp():Void {
    // フラグのような数値を入れる変数の値を1加算
    flg_num++;
    // 定義した setInterval を削除
    clearInterval(myID);
 }
--------------------------------------------------------------

投稿日時 - 2009-10-13 01:50:13

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

書かれていらっしゃるスクリプトに付け足すとする場合で,
なおかつ 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 が使えるので,
この場合(単発実行するような場合)は,これを使った方が楽かもしれません。

投稿日時 - 2009-10-07 19:03:29

補足

すごい丁寧に説明してくださってありがとうございます。

でちょっと質問なんですが、
-------------------------------------------------
// 数値を代入するフラグのような変数を初期化
var flg_num:Number = 0;



// 関数 flgUp を定義
function flgUp():Void {
// フラグのような変数に1を加算
flg_num++;
// setInterval を削除
clearInterval(myID);
}
-------------------------------------------------
を定義しているところがよくわからないんですが、
これは何を意味する変数なんでしょうか?

行動を切り替えるために上のような変数を作る必要があるからなんでしょか?

投稿日時 - 2009-10-10 23:52:25

あなたにオススメの質問