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

解決済みの質問

suzukaでのアルファ値操作

flash作成ソフトsuzukaについてのご質問です。
どなたかよろしくお願いいたします。

外部jpg画像をムービークリップに読み込み、
フェードイン後 30秒停止し、フェードアウトを
行いたいのですが、方法がわからずつまづいています。

setInterval関数 か setTimeout関数のどちらかを使うのだろうなと
いうぐらいまでしかわからない程の知識です。

ご指導のほど、よろしくお願いいたします。

----------------------------------------------

// このムービークリップが読み込まれたら
onClipEvent (load) {
// このアルファを 30 にする
this._alpha = 30;
}

// 1フレーム進む時間ごとに毎回実行
onClipEvent (enterFrame) {
// もしこの アルファ が 100 より小さいとき
if (this._alpha<100) {
// このアルファを 3 加算する
this._alpha += 3;
// それ以外の場合(アルファ100以上)
} else {
// このアルファを 100 で固定
this._alpha = 100;
}
}

------------------------------------------
上記のスクリプトは問題なく動作します。
上記のスクリプトのアルファ値が100に到達してから
30秒後動作する下記の内容をプラスしたいのですが、

-----------------------------------------

// もしこの アルファ が 0 より大きいとき
if (this._alpha>0) {
// このアルファを 3 減算する
this._alpha -= 3;
// それ以外の場合(アルファ0以下)
} else {
// このアルファを 0 で固定
this._alpha =0;}

-----------------------------------------

どなたかアドバイスをよろしくお願いいたします。

投稿日時 - 2009-11-18 05:47:55

QNo.5456900

すぐに回答ほしいです

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

書かれていらっしゃるスクリプトを延長させる場合は、
フラグ(のような変数)を用意して、
そのフラグ(のような変数)の値を切り替えて行く方法を取ります。


---例--------------------------------------------
// このムービークリップが読み込まれたら
onClipEvent (load) {
// このアルファを 30 にする
this._alpha = 30;
// フラグ(のような変数)の初期値を設定
flg = 0;
//
// フラグを2にする関数を定義
function changeFlg(){
// フラグの値を2にする
flg = 2;
}
}

// 1フレーム進む時間ごとに毎回実行
onClipEvent (enterFrame) {
// もしフラグが 0 のとき
if(flg == 0){
// なおかつこの アルファ が 100 より小さいとき
if (this._alpha<100) {
// このアルファを 3 加算する
this._alpha += 3;
// それ以外の場合(アルファ100以上)
} else {
// このアルファを 100 で固定
this._alpha = 100;
// フラグの値を 1 にする
flg = 1;
// 30秒後に関数 changeFlg を実行
setTimeout(changeFlg, 30000);
}
//
// もしフラグが 2 のとき
}else if(flg == 2){
// なおかつこの アルファ が 0 より大きいとき
if (this._alpha>0) {
// このアルファを 3 減算する
this._alpha -= 3;
// それ以外の場合(アルファ0以下)
} else {
// このアルファを 0 で固定
this._alpha = 0;
// フラグの値を 3 にする
flg = 3;
}
}
}
----------------------------------------------------


アルファを加算減算する値(+3 、0、-3)を変数化しておいてその変数の値を変えるなど、
他の方法もありますが 基本的には上のように考えて行きます。


しかしこの方法は複雑になれば頭がこんがらがってきますし、
またアルファを変えていない時もずっと無駄な onClipEvent(enterFrame){} を動作させ続けるというダブルのデメリットがあります。

どっちみち setInterval は Flash Player 6 以上が必要なわけですし、
setTimeout は Flash Player 8 以上が必要なのですから、
Flash Player 5 用の onClipEvent(enterFrame){} を使う必要はないと思います。
Flash Player 6 以上用の onEnterFrame=function(){}; を使う方が簡単ですし無駄なCPUの浪費を防げると思います。


---例--------------------------------------------
// このムービークリップが読み込まれたら
onClipEvent (load) {
// このアルファを 30 にする
this._alpha = 30;
//
// フェードインさせる関数を定義
function fadeIn(){
// もしこの アルファ が 100 より小さいとき
if (this._alpha<100) {
// このアルファを 3 加算する
this._alpha += 3;
// それ以外の場合(アルファ100以上)
} else {
// 30秒後に関数 actionFadeOut を実行
setTimeout(actionFadeOut, 30000);
// この onEnterFrame を削除
delete onEnterFrame;
}
}
// フェードインさせる関数を随時実行
onEnterFrame = fadeIn;
//
// フェードアウトさせる関数を定義
function fadeOut(){
// もしこの アルファ が 0 より大きいとき
if (this._alpha > 0) {
// このアルファを 3 減算する
this._alpha -= 3;
// それ以外の場合(アルファ0以下)
} else {
// この onEnterFrame を削除
delete onEnterFrame;
}
}
//
// フェードアウトさせる関数随時実行させる関数を定義
function actionFadeOut(){
// フェードアウトさせる関数を随時実行
onEnterFrame = fadeOut;
}
}
----------------------------------------------------

この後何かある場合(フェードアウトしたら下に50px動いてその後にフェードインしながら回転する など)も
1つ1つの動作を function で作りつづけて行けば良いわけですから,
フラグにとらわれずに作りつづけて行くことができると思います。

投稿日時 - 2009-11-18 19:31:27

お礼

BlurFiltan様

本当にありがとうございます。
おかげさまで動作しています。
感謝してもしきれないです。

参考書も買わずにネットでFLASHの勉強をしていただけでして、

>アルファを変えていない時もずっと無駄な onClipEvent(enterFrame){} を動作させ続けるというダブルのデメリットがあります。

>どっちみち setInterval は Flash Player 6 以上が必要なわけですし、
>setTimeout は Flash Player 8 以上が必要なのですから、
>Flash Player 5 用の onClipEvent(enterFrame){} を使う必要はないと思います。
>Flash Player 6 以上用の onEnterFrame=function(){}; を使う方が簡単ですし無駄なCPUの浪費を防げると思います。


これらの点も全くわからない状態でした。
これから少しずつ勉強をしていきたいと思った次第です。

本当にありがとうございました!

投稿日時 - 2009-11-20 13:33:37

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

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

回答(1)

あなたにオススメの質問