- ベストアンサー
FlashMX フェードアウト
以前、教えていただいた フェードインするスプリクト onClipEvent (load) { _alpha = 0; } onClipEvent (enterFrame) { _alpha += 1; } このあと、フェードアウトしたいのですが どのようにしたらよいのか教えて下さい。 それと モーショントゥーインでの フェードイン→フェードアウトのさせかたも 教えて下さい お願いします。 (FlashMX OS2000です)
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
トゥイーンとは、最初と最後のコマを作っておくだけで Flash が間のコマを自動で作成してくれる機能で、モーショントゥイーンとシェイプトゥイーンの2種類があります。 フェードインは透明度(アルファ値)だけが変わればいいアニメですので、形を変えずに透明度や大きさ・角度などの属性だけを変化させる、モーショントゥイーンの方を使います。 シェイプトゥイーンは、例えば四角が丸になるなど、形そのものを変化させたい時に利用します。 モーショントゥイーンはムービークリップでなければ利用できません。 最初のキーフレームは、ムービークリップを配置し、「プロパティ」パネルにある「カラー:」のリストから「アルファ」を選び、スライダを調節して0%(完全に透明)にします。 何フレームか間を空けて、もう1つキーフレームを作ります。このキーフレームが、アニメの最後のコマになります。 最後のキーフレームにもムービークリップを配置(右クリック→「キーフレームの挿入」で作ると、前のキーフレームと同じ内容のフレームができます)して、同じ要領でアルファを 100 %(不透明)にします。 間のフレームを選択し、右クリックで出すメニューから「モーショントゥイーンを作成」を選ぶと、間のコマが自動で作られます。 この状態でモーショントゥイーンを作ると、フェードインになります。 ここからフェードアウトさせるには、続けてフェードアウトのモーショントゥイーンを作ります。 先述のアニメの何フレームか先に、もう1つキーフレームを作ってください。 このフレームのムービークリップのアルファ値を0%に設定し、同様にモーショントゥイーンを作成して、操作を確認してみてください。フェードインしてフェードアウトするアニメになります。 ------------------------------------ フェードイン/アウトは先述の通り、アルファ属性が変化しているアニメです。 移動は位置(座標)、拡大・縮小は大きさ、回転は角度が変化するアニメです。 ActionScript では、ムービークリップの位置や大きさ・角度・アルファ等の属性(プロパティといいます)がそれぞれ情報として管理されていて、スクリプトで数値を書き換えることでモーショントゥイーンと同様のことができるようになっています。 スクリプトでモーショントゥイーンと同じことをするには、プログラムを組んで、変更したいプロパティの数値を書き換えます。 画面で効果を確認しながら作る方法とは違って、効果が想像しにくい、少々抽象的な作り方になります。 しかし、タイムラインではせいぜいフレーム数を調節して速さを変えるくらいしかできませんが、スクリプトでは変数や数式を利用して、タイムラインではできない、面白い変化をさせることも可能です。 また、タイムラインでキーフレームを作ると、その分ムービーの容量が増えますが、スクリプトで変化させればキーフレームを減らすことができ、容量が軽くなるという利点があります。 フェードイン/アウトで使われるアルファは、ActionScript では _alpha というプロパティになっています。 プロパティは変数のようなもので、自由に中身を見たり書き換えたりできるものと、中身を見ることしかできない読み取り専用のものがあります。 _alpha プロパティは書き換えも可能なプロパティです。 スクリプトでフェードイン/アウトのアニメを作る時は、この _alpha プロパティを操作します。 先ほどのトゥイーンでの、アルファの値に注目してください。 アルファの値は、0%→ 100 %→0%と変化しています。 _alpha のプロパティには、同様に、ムービークリップの透明度が%で入っています。 つまり、_alpha の値をスクリプトで 0 → 100 → 0 と変化させることができれば、フェードインしてフェードアウトというアニメになります。 スクリプトはこのように考えます。 フェードインとフェードアウトは、要するに、_alpha プロパティに加算する数値が正か負かの違いだけです。 加算する数値が正の時はフェードイン、負の時はフェードアウトとなります。 この数値の符号を変数で管理し、その内容を元に加算する値を決めると、ある条件になったらフェードイン/アウトを切り替えるといったことも可能になります。 符号を管理する、というと難しいですが、次のように考えます。 例えば 10 と -10 という数値について考えてみますと、10 に 1 を乗算したものが 10 、-1 を乗算すると -10 となりますよね。 この、1 か -1 かを専用に管理する変数を1つ、用意します。ここでは仮に、この変数を fade_mode という名前だとします。 例えば、10 ずつ _alpha プロパティを変化させる時に、 _alpha += 10; と書くと、10 ずつフェードインという結果にしかなりません。 しかし、 _alpha += fade_mode * 10; このように変数を使った場合は、fade_mode に 1 が入っている時と -1 が入っている時とでは動作が違います。 1 の時は 10 ずつ加算されるのでフェードインですが、-1 の時は -10 を加算、つまり _alpha -= 10; と同じになりますので、フェードアウトになります。 次に、fade_mode の値はどのように変更するかを考えてみますと。 始めはフェードインにしたいので、最初は正である 1 を入れておきます。 何もしなければ、ずっとフェードインのまま変化しません。 フェードアウトに切り替えるタイミングは、ムービークリップの透明度が不透明になった時、スクリプトで言うなら _alpha プロパティの値が 100 以上になった時です。 ある条件になった時に何かをさせるには、if という制御文を使います。英語の「もし~なら○○する」という意味の if と同じです。 この if 文を使って _alpha の値を判断し、100 以上であれば fade_mode を -1 に切り替えます。 実際にスクリプトにしてみますと、次のようになります。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります) onClipEvent(load) { //フェードイン/アウトのモードを管理 //1:イン -1:アウト fade_mode = 1; //効果のスピードを保持 fade_spd = 1; //アルファの初期値を設定:最初は透明にする _alpha = 0; } onClipEvent(enterFrame) { //アルファが100(不透明)になったら、フェードアウトに切り替える if( _alpha >= 100 ) { fade_mode = -1; } //アルファの値を書き換える _alpha += fade_mode * fade_spd; } 先ほどの説明ではアニメのスピードを 10 という決まった数にしていましたが、上記のスクリプトでは、この数字の代わりに fade_spd という変数で指定しています。 fade_spd = 1; このスクリプトで、変数 fade_spd に 1 が入ります。以降は、fade_spd と書かれている部分が数字の 1 と同じ意味になります。 1 の部分を 5 や 10 など、別の数値にしてみてください。アニメのスピードを変えることができます。 ちなみに、if( _alpha >= 100 ){ ・・・ } のあとに //アルファが0(完全に透明)になったら、フェードインに切り替える if( _alpha <= 0 ) { fade_mode = 1; } このようなスクリプトを付け足すと、フェードイン→フェードアウト→フェードイン・・・という、明滅を繰り返すアニメになります。
お礼
すごく丁寧で解りやすい回答ありがとうございました。 早速 二つ方法でためしてみました 二つともうまく フェードイン→フェードアウトすることができました。 DPEさん本当にありがとうございました。