- 締切済み
フラッシュ・ムービークリップの扱い方
フラッシュで作った音楽付きSWFファイルが複数ありまして、例えば「A.swf」、「B.swf」」、「C.swf」というふうに順番に再生(ボタン機能は無し)していくような一つのSWFに合体させたいのですが、どのような方法がありますでしょうか? 新規ファイルにそれぞれムービークリップとして読み込んで、タイムラインに並べたのですが、アクションの付け方がよくわからず、全て同時に動き出してしまいます。良い方法がありましたら、よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
> 新規ファイルにそれぞれムービークリップとして読み込んで、 この一文が, いったいどういうことを書いているのかが最も難解です。 上の一文は, 「3つの小さな(もしくは空の)ムービークリップを ステージ上に作成して, その3つのムービークリップに, それぞれ loadMovie で, 外部「A.swf」~「C.swf」をロードした。」 という意味に解釈してよろしいのでしょうか。 一般的にはこのような方法を取ると思います。 つまり,もう少し具体例で書くと, 3つの小さな(もしくは空の)ムービークリップを作成して, インスタンス名を「a_mc」,「b_mc」,「c_mc」などと付けておいて, フレームのスクリプトに, _root.a_mc.loadMovie("A.swf"); _root.b_mc.loadMovie("B.swf"); _root.c_mc.loadMovie("C.swf"); のようなことを書いて 外部「A.swf」~「C.swf」 を, 「a_mc」~「c_mc」に読み込んだ。 ということです。 これに関する部分のみのレイヤーを図示したとすれば, 次のような感じになっているということです。 □ レイヤー 筆・・|○| ←スクリプトloadMovie □ レイヤー 筆・・|●| ←「a_mc」~「c_mc」 以上のように, そういう一般的なものとして回答します。 ====================== > 全て同時に動き出してしまいます。 同時にロードしたから同時に始まるのでしょう。 逆に同時にロードして同時に始まらなければ,それこそが大問題です。 音の件は除いたとすれば, 無数に方法はあると思いますよ。 まず,読み込むムービークリップを1つにして, 3フレームに分けます。 □ レイヤー 筆・・|○|○|○| ←スクリプト □ レイヤー 筆・・|●|●|●| ←「a_mc」のみ フレーム1 のスクリプトでは, 次のように書いて,stop させたうえで「a_mc」に「A.swf」を読み込みます。 ----------------------------- stop(); _root.a_mc.loadMovie("A.swf"); ----------------------------- フレーム2 のスクリプトでも, 次のように書いて,「a_mc」に「B.swf」を読み込みます。 ----------------------------- _root.a_mc.loadMovie("B.swf"); ----------------------------- フレーム3 のスクリプトでも同様に, 次のように書いて,「a_mc」に「C.swf」を読み込みます。 ----------------------------- _root.a_mc.loadMovie("C.swf"); ----------------------------- これで, パブリッシュしてもらっても, 当然,外部「A.swf」がロードされて再生されるだけです。 この対処は簡単で, 「A.swf」再生後に,「B.swf」の再生を開始させれば良いわけですから, 「A.swf」の最終フレームをキーフレームにしてその最終フレームに, ----------------------------- // _root を次のフレームに進める _root.nextFrame(); ----------------------------- と書けば良いだけのことです。 すると, _root のフレームは 2 に進むのですから, _root.a_mc.loadMovie("B.swf"); が実行されます。 そして, 「B.swf」の最終フレームもキーフレームにしてその最終フレームに, ----------------------------- // _root を次のフレームに進める _root.nextFrame(); ----------------------------- と書けば良いだけのことです。 「C.swf」 の最後は知りません。 そのまま止めたいのでしたら, ----------------------- // この階層を ストップ this.stop(); ----------------------- とでも書いておけば良いですね。 また「A.swf」から順に同じ事をくり返ししたいのでしたら, ----------------------------- // _root をフレーム1に戻す _root.gotoAndStop(1); ----------------------------- となります。 ====================== > 全て同時に動き出してしまいます。良い方法がありましたら、 良い方法と書かれましても, 何がしたいのかがはっきりしません。 上の方法は,1つずつの SWF を順次再生させる方法です。 「A.swf」~「C.swf」は同時に表示させておいて, なおかつ, 「A.swf」再生修了後,「B.swf」再生開始。 「B.swf」再生修了後,「C.swf」再生開始。 という感じにしたいのでしょうか? それだと,構造としては最初の形にもどります。 レイヤーは次のようにしておいて, □ レイヤー 筆・・|○| ←スクリプトloadMovie □ レイヤー 筆・・|●| ←「a_mc」~「c_mc」 スクリプトは最初に書いたように, ------------------------------ _root.a_mc.loadMovie("A.swf"); _root.b_mc.loadMovie("B.swf"); _root.c_mc.loadMovie("C.swf"); ------------------------------ となります。 「A.swf」だけを再生開始させたいのですから, 「B.swf」 と 「C.swf」 の最初のフレームに, ----------------------- // この階層を ストップ this.stop(); ----------------------- を書いておけば, 「B.swf」 と 「C.swf」 の再生は開始しないでしょう。 そして, 「A.swf」再生後に,「B.swf」の再生を開始させれば良いわけですから, 「A.swf」の最終フレームをキーフレームにしてその最終フレームに, ----------------------------- // この階層を ストップ this.stop(); // _root の b_mc を再生開始 _root.b_mc.play(); ----------------------------- また, 「B.swf」再生後に,「C.swf」の再生を開始させれば良いわけですから, 「B.swf」の最終フレームをキーフレームにしてその最終フレームに, ----------------------------- // この階層を ストップ this.stop(); // _root の c_mc を再生開始 _root.c_mc.play(); ----------------------------- となります。 「C.swf」も同様に考えて何かさせてください。 音に関しては, 何か問題が生じるのか生じないのか, こちらではわかりませんので,回答を控えます。 ===================== 一見複雑ななことも, よく見ると簡単なことが合わさっているだけですよ。 すべてを一度に解決しようとするのではなく, 1つ1つの簡単なことがらを, 1つ1つ解決すれば簡単にクリアできることだと思います。 このご質問にかぎらず,そういうものが大半です。 というか, 逆に1つずつ先に進まないと, うまく行かない原因がどこにあるのかがわかりません。 「わからない部分がどこなのかをまずわかるようにすること。」 「うまくいかない部分がどこなのかをまずわかるようにすること。」 それが大切です。 「どこがわからないのかがわからない。」 というようなことを言っていても現実問題は何の解決しません。 「どこがわからないのかわからない。」状態を脱するためには, うまく行かない部分とうまく行く部分にバラバラに切りわけて, うまくいかない "ポイント" を見つけるようにしてください。 その "ポイント" が発見できたら, その "ポイント" について調べるなり人に聞くなりすれば何か解決策が見つかると思います。 人に聞く場合であっても, ポイントがしぼれていると, 回答する側も,その回答を理解する側も,両方がスパッと楽に解決するとおもいます。 あとバージョンがわかりませんが, 上に書いた方法(スクリプト)は,Flash 5 以上で使える方法(スクリプト)です。
- _ageha_
- ベストアンサー率57% (8/14)
プロパティインスペクタの同期をスタートにしてみましたでしょうか。 デフォルトのイベントのままですと、サウンドが重なってしまうようです。 また、ストップにすると、配置したフレームでサウンドデータが停止されます。
補足
_ageha_さんありがとうございます。 たぶんもっと基本的なことが分かっていないようで、 フレーム1にムービークリップ1、フレーム2にムービークリップ2というように、順番に配置してみたんですが、プレビューでみてみると、それぞれのムービークリップの1フレーム目が交互に表示されてチカチカするだけで、うまくいきません。ムービークリップ1が再生し終わったらムービークリップ2が再生、というように設定するにはどうすればよいのでしょうか。どうそよろしくお願いします。
お礼
親切、丁寧なご回答、本当にありがとうございます。 涙が出そうなほどにうれしいです。 おかげさまで解決できました。 分からない部分の発見と、それを的確に伝えられるようにポイントを絞ること、ごもっともです。 分からないことを一つずつ解決して、少しずつマスターしていきたいと強く思うようになりました。本当にありがとうございました。