FLASHのアクションスクリプトの勉強中です。
外部SWFファイルを複数用意してボタンで呼び出す方法はわかったのですが、その読み込まれ方をかっこよくできないか考えています。

何個かSWFファイルを作成した後、新規FLAファイルを作成しました。

そのファイルにスクリーン用のシンボル(上のSWFファイルと同じ大きさのもの)を作成しインスタンス名を「screen」にしました。

ほいでもって複数のボタンシンボルを作成し、

on (release) {
_root.screen.loadMovie("pekepke.swf");
}
という感じで外部swfファイルをそれぞれのボタンより読み込むとこまではできたのですが、その読み込まれ方と切り替るときの表示の仕方をふわっと現れ、ふわっと消えてからファイルが現れるというふうにしてみたいのですができますでしょうか?

ちなみにflash8を使用しております。ヒントでもいただけるとありがたく思います。

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

A 回答 (2件)

#1です




> それをBlurFilterなどを使ってファイルが

"など" と言うことは実際に何が出てくるかもわかりません。

また具体的に決まっていないということは
そのときの気分によって変えたいということだと思うので,
単なる1例ですが,
親ムービークリップの中で子ムービークリップをモーショントゥイーンで出没させるものを作って,
子ムービークリップに外部JPEGをロードすれば良いのではないかと思います。


ファイル構造が次のようになっていたとします。

 任意のフォルダ
   ├○○.fla(○○.swf を作成するファイル)
   ├○○.swf(JPEG をロードするFlash)
   ├pic1.jpg
   ├pic2.jpg
   ├pic3.jpg
   ├pic4.jpg
   └pic5.jpg


○○.fla のステージ上にムービークリップを作成して,
たとえば「load_mc」というインスタンス名を付けます。
その「load_mc」をさらにムービークリップに変換して,
たとえば「oya_mc」というインスタンス名を付けます。

「oya_mc」をダブルクリックするなどして,
その中のタイムラインを複数フレームにして,
ブラー(フィルタ-ぼかし)でもイージングでも何でも使って
好きなように 「load_mc」を出没させます。

そして「oya_mc」内のタイムラインの最終フレームのキーフレームに
stop();
を書いて「oya_mc」内タイムラインがループ再生しないようにしておきます。
ここまでを図示したのが下の図↓です。

この辺まではFlashの基本ですよね。

そして,_root(シーン1 などメインのタイムライン)の編集に戻って,
ボタンを作成し,そのボタンに
たとえば「my_btn」というインスタンス名を付けます。

そして _root のフレームに次のように書いてパブリッシュすれば,
ボタンを押すたびに
「pic1.jpg」「pic2.jpg」「pic3.jpg」「pic4.jpg」「pic5.jpg」「pic1.jpg」「pic2.jpg」…
がロードされるものができます。

------------------------------------------------------------
// oya_mc 内タイムラインの再生を停止
oya_mc.stop();
// oya_mc を非表示にする
oya_mc._visible = false;

// jpeg カウント用変数 j_cnt の初期化
var j_cnt:Number = 0;
// ムービークリップカウント用変数 m_cnt の初期化
var m_cnt:Number = 0;

// my_btn をクリックしたときの動作を定義
my_btn.onRelease = function():Void {
// 変数 j_cnt の値が 5 未満であれば
if (j_cnt<5) {
// j_cnt に 1 を加算
j_cnt++;
} else {
// j_cnt の値が 5 以上であれば 1 にする
j_cnt = 1;
}
// 変数 m_cnt に 1 を加算
m_cnt++;
//
// oya_mc を oya_mc○ という名で深度 ○ に複製
oya_mc.duplicateMovieClip("oya_mc"+m_cnt, m_cnt);
// その oya_mc○ 内の load_mc に 外部JPEG をロード
_root["oya_mc"+m_cnt].load_mc.loadMovie("pic"+j_cnt+".jpg");
//
// 変数 m_cnt の値が 3 以上になれば
if (m_cnt>=3) {
// 2つ前の oya_mc○ を削除
_root["oya_mc"+(m_cnt-2)].removeMovieClip();
}
};
------------------------------------------------------------



とにかく具体的な動作や動きを頭の中で作って,
その動作や動きになるようにActionScriptを組む必要があります。

フィルタを使うなら使う使わないなら使わない
アルファを使うなら使う使わないなら使わない
座標の指定,深度の指定などなど…。

具体的動作をプログラミング的にイメージできない場合は
上のような方法をとるのが良いと思います。

上のプログラムは,
 ボタンをクリックする度に oya_mc を
 上のレイヤー上のレイヤーコピペしていき
 不要になったムービークリップは削除する
というイメージのプログラムです。

上のようにした場合,oya_mc を作成した段階で,
すでに座標やアルファなどを設定してあるはずなので,
その部分のプログラミングはしなくて済むというう方法です。

しかし,
 ボタンをクリックする度に oya_mc を
 上のレイヤー上のレイヤーコピペしていき
 不要になったムービークリップは削除する
というイメージが具体的にないとそのようにプログラムは書けないわけです。
このイメージは,
ムービーを手動で作成する手間の部分を自動化しただけの話です。

つまりこれ↓に近いイメージです。

 レイヤー1|○       []|●-------->|●|
 レイヤー1|○    []|●-------->|●|
 レイヤー1|○ []|●-------->|●|
 レイヤー1|●-------->|●|

したがってやはり,
手動で作成するというのがプログラミングの基本だと思います。
上のような状態が作成できなければプログラミングもできないと思います。
「FLASHの外部SWFファイルの読み込み」の回答画像2
    • good
    • 0

基本的には "外部SWFファイルをロードするしないは本題と関係がない" ことだと思います。



「外部SWFファイル」 の部分を 「ムービークリップ」 に読みかえてみれば良いでしょう。

 「ムービークリップを切り替るときの表示の仕方を
   ふわっと現れ、ふわっと消えてからが現れるようにする」

これができれば,外部SWFでもおのずとできると思います。
その ムービークリップ に SWF をロードすれば良いのですからほとんど変わりありません。

"「問題の切り分け」が大切です。"



「ムービークリップをふわっと表示させる方法」 だけ考えても方法は無数にあります。

・モーショントゥイーンでムービークリップのアルファを 0から100 にする。
・ActionScriptで ムービークリップのアルファを 0から100 にする。
・モーショントゥイーンでムービークリップの明度を 100から0 にする。
・ActionScriptでムービークリップの明度を 100から0 にする。(←少々難)
・モーショントゥイーンでムービークリップの フィルタのぼかし を変える。
・ActionScriptでムービークリップにかけるBlurFilterを変える。(←少々難)
・ムービークリップの上に白い塗りのムービークリップを用意して
 その白ムービークリップのアルファをモーショントゥイーンで 100から0 にする。
・ムービークリップの上に白い塗りのムービークリップを用意して
 その白ムービークリップのアルファをActionScriptで 100から0 にする。
          …  …  …
 ~その他マスクなども組み合わせるとどんどん出てくるので略~
   (Flash8 だとアルファマスク やグラデーションマスクも可能)



 「ムービークリップを切り替るときの表示の仕方を
   ふわっと現れ、ふわっと消えてからが現れるようにする」

これができたとします。
次に実際にそのムービークリップに SWF をロードしてみます。
すると不具合が起こることもあります。
不具合の例
 ・サイズが違う
 ・表示位置が思ったところに来ない
 ・ステージ外が見える
 ・ロードが遅いのでうまくふわっと出てこない
  ~略~

そのような問題が起こった時は 「それはそれ」 で対処すべきです。
つまり 「ふわっと現れふわっと消える方法」 の質問とは全く違った質問になるはずです。



また仮に,例えば,
上の方法の最初に書いた
「・モーショントゥイーンでムービークリップのアルファを 0から100 にする。」
という意味が,そもそも何のことわからなかったとします。
その場合はその場合で,
「ムービークリップなどの絵をふわっと表示させる方法」 を質問すべきでしょうね。
いきなり外部SWFのロードから Flash を始めるのは変です。順を飛ばしすぎです。



親SWFのムービークリップにロードした外部SWFファイルは,
親SWF内の単なる1つのムービークリップです。

 ムービークリップの操作ができなければ
 読み込んだ外部SWFファイルの操作もできない。
      ↓↓  ↑↑
 ムービークリップの操作ができれば
 読み込んだ外部SWFファイルの操作もできる。
     ↓↓↓↓↓↓↓
 SWFをロードしたしていない と ムービークリップの演出 は
 ごく一部の例外事項を除いて全く関係がない。



何はともあれ,
とにかく "「問題の切り分け」が大切です。" です。
 
「FLASHの外部SWFファイルの読み込み」の回答画像1

この回答への補足

返信が遅くなってすいません。いろいろと試していました。質問が下手ですいません。なにせまだよく理解しておりませんので申し訳ございません。
当方モーショントゥイーンでのふわっと現れたり消えたりなどはできるのですが、それだと消えたり現れたりするのにものすごいタイムラインができてごちゃごちゃになってしまうきがして、ボタン(メニューなど)を押した時に現在表示されているものがふわっと消えて他のボタンで表示される内容がふわっと現れるというのを外部swfファイルで呼び出し、その表示時にアクションスクリプトで表示のされ方を制御できたら編集作業などがらくにでき管理しやすいのではと思い挑戦してるところです。

なお、それをBlurFilterなどを使ってファイルが読み込まれたときにと次のボタンが押されたときにできたらいいのになぁと考えていましたもので・・・。

ちなみに外部ファイルを読み込むステージにモーショントゥイーンで消えたり現れたりを表現しても外部ファイルが読み込まれたら影響をうけません。

マスク用のレイヤーを作ってそれにボタンが押されたときだけ動くようにすればいいのかな?あ~~またややこしくなる。

ということでまた混乱させてしまいました。もちっと勉強してきます。

補足日時:2009/05/22 04:22
    • good
    • 0

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


人気Q&Aランキング