- ベストアンサー
FlashMX:外部swfから大元のswf上の指定フレームへ移動させる
- Flash MXとWindows Vistaを使用して、大元のswf上で外部swfから指定のフレームに移動する方法を説明します。
- 大元のswf(main.swf)で20個ほどの小さな写真兼拡大ボタンを作成しています。小写真ボタンAをクリックすると、photo-a.swfがレベル1で読み込まれます。main.swfの拡大ボタンを消すために特定のフレームにボタンを消すフレームを作成し、そこにgotoStopを配置します。
- photo-a.swf内でムービーが終了すると、戻るボタンを用意しています。このボタンをクリックすると、指定のフレームに移動し、写真が消えるアニメーションが再生されます。しかし、現在の記述ではうまく動作しません。photo-a.swfからmain.swf上の指定のフレームに移動させるためには、どのように記述すればよいでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まず「レベル」を使うのはやめましょう。 レベル は Flash 4 時代(ギリギリ Flash 5 まで)の遺物です。 ActionScript 1.0 未満 ("以下" ではなく "未満") 時代の概念で ActionScript 1.0 に完全対応しきれていません。 ※レベルはオブジェクト(ムービークリップ)でないのに オブジェクトのような振る舞いをする場合がある (その逆の場合もある) など矛盾が多く混乱の元になるだけ。 ※レベルはActionScript 2.0 までは かろうじて生き残っていたが ActionScript 3.0 では完全に消えた概念である。 (そもそも ActionScript 2.0 の時点で存在した こと自体がおかしい。) 外部SWFをレベル1などにロードするのではなくて MC(ムービークリップ)を手動またはActionScriptで作成して, そのMCに外部SWFをロードするようにしましょう。 そうすれば ターゲットパスさえ理解していれると普通に解決するはずです。 「ターゲットパス」 http://homepage3.nifty.com/ginga-b/MX/targetpath.html ◎具体例 ・「main.swf」の _root 階層などのフレーム1などに書くスクリプト↓ -------------------------- //この階層の再生を停止 stop(); //この階層の深度0に「loader_mc」というMCを作成 this.createEmptyMovieClip("loader_mc", 0); -------------------------- ↑これは ActionScript で 「loader_mc」 というインスタンス名のMCを作成する場合です。 任意のレイヤーの任意の座標に手動でMCを作成して そのMCに例えば 「loader_mc」 というインスタンス名を付けてもかまいません。 もし手動でMCを作成した場合は スクリプト抜きでも座標やレイヤーを指定することができます。 ・「main.swf」の ボタンに書くスクリプト↓ -------------------------- on(release){ //同じ階層の「loader_mc」に「photo-a.swf」をロード loader_mc.loadMovie("photo-a.swf"); //この階層を次のフレームへ進めて停止 nextFrame(); } -------------------------- ↑これの //この階層を次のフレームへ進めて停止 nextFrame(); の部分はどうすべきか私は知りません。 nextFrame(); ではなく gotoAndStop("btn_off"); のようにしていたら,別にそのままで良いです。 ・「photo-a.swf」の _root 階層などの最終フレームに書くスクリプト↓ -------------------------- //親階層を前のフレームに戻して停止 _parent.prevFrame(); //この階層からムービーをアンロード this.unloadMovie(); -------------------------- ↑これの //親階層を前のフレームに戻して停止 _parent.prevFrame(); の部分はどうすべきか私は知りません。 _parent.gotoAndPlay("btn_on"); かもしれませんし _parent.mc-menu00.gotoAndPlay("btn_on"); かもしれません。 作られているムービーによって変える必要があります。 ◎ポイント ・MC(ムービークリップ)に外部SWFをロードしましょう。 ・ターゲットパスをしっかり理解しましょう。
その他の回答 (1)
- BumeshiOK
- ベストアンサー率92% (12/13)
unloadMovieNum(1); mc-menu00.gotoAndPlay("btn_on"); ↑結局これはどこから出してる命令でしょうか? photo-a.swfからだとすると、 mc-menu00がルート(というかレベル0)に置いてあるものなら、 _level0.mc-menu00.gotoAndPlay("btn_on"); じゃないでしょうか。
お礼
ありがとうございました。 _level0.mc-menu00.gotoAndPlay("btn_on"); では動きませんでした。 が、これがわかったおかげで何をどうすればわかったので、完成させることできました!
お礼
実は、ムービークリップで最初つくっていたんですが、うまくいかなくて、 ネットで探したページにはどこでもレベルというもうひとつの方法が必ず併記されていたので こちらを試し、結果できました。20個以上の外部拡大写真を見事に操作することできました。 どこをどう操作してもおかしくならないのですが、ご助言点は非常に重要と判断されるため、 こちらのほうへの書き換えを試そうと思います。まずは取り急ぎお礼まで。 作業後どうなったかを補足欄で投稿させていただきます。 大変ありがたい内容です。