出産前後の痔にはご注意!

以前、教えていただいた フェードインするスプリクト
onClipEvent (load) {
_alpha = 0;
}
onClipEvent (enterFrame) {
_alpha += 1;
}
このあと、フェードアウトしたいのですが
    どのようにしたらよいのか教えて下さい。
それと モーショントゥーインでの
   フェードイン→フェードアウトのさせかたも
           教えて下さい お願いします。
(FlashMX OS2000です)

このQ&Aに関連する最新のQ&A

A 回答 (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;
 }


このようなスクリプトを付け足すと、フェードイン→フェードアウト→フェードイン・・・という、明滅を繰り返すアニメになります。
    • good
    • 0
この回答へのお礼

すごく丁寧で解りやすい回答ありがとうございました。
 
 早速 二つ方法でためしてみました 二つともうまく フェードイン→フェードアウトすることができました。
       
      DPEさん本当にありがとうございました。

お礼日時:2005/03/29 20:54

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング