- ベストアンサー
別のムービーの指定ラベルへジャンプするには?
- ソフトのデモムービーで、進行に応じてラベルごとに進む方法について質問です。
- 次へ行くボタンではloadMovieNum関数を使用して次のムービーの先頭に移動しますが、前へ戻るボタンを押した時に、前のムービーの指定ラベルから再生させる方法がわからないようです。
- このような場合、どのように対応すれば良いでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
どう考えても無理です。 少なくとも障壁が2箇所あります。 loadMovieNum("ddd.swf", 0); この 0 は,_level0(レベル 0) です。つまり _root です。 _level0 なんかに読み込んだらその読み込んだムービーによって,読み込むムービーが全て乗っ取られます。 変数の値も,インスタンス名も,当然スクリプトも, 以前 _level0 にあったものは全て抹消されて,新たなるムービーに乗っ取られます。 _level1 なら,_root が乗っ取られることはないので, なんとかなるとは思います。 たとえば, on (release) { _root.flag = 1; loadMovieNum("ddd.swf", 1); } として, _root に flag(フラグ) という変数に 1 という値を入れ, _level1 に ddd.swf をロードします。 ddd.swf の フレーム1 に if(_root.flag == 1){ this.gotoAndPlay("ラベル3"); } とすれば, _root の変数 flag の値が 1 の時だけ, "ラベル3" に gotoAndPlay します。 それ以外の時は,何も起こらず,普通にアニメーションします。 しかし, 上は理論上うまく行くだけで実際問題は "ラベル3" には飛ばないと思います。 これは loadMovie してもしなくても,関係ありません。 loadMovie しない普通の ムービーの フレーム1 に gotoAndPlay("ラベル3"); と書いたとします。 その SWF をWebを通してエンドユーザーが見たとします。 その見た瞬間 "ラベル3" までムービーがロード(メモリ上にダウンロード)されていることはまずあり得ないので, Flash としては "ラベル3" なんてものは見つけることができないため, 「???」状態になってストップします。 だから,「Now Loading ...」 のような画面を作って, そのムービーが全てロードされるのを待ってから, if判定で flag が 1 であれば "ラベル3" へ gotoAndPlay させるようにしなければなりません。 もしくは,Flash MX 2004 以降をお持ちでしたら, _root 上に MovieClipLoaderインスタンス を生成して, その MovieClipLoader に新しいムービーが読み込まれ次第, 表示させるとかです。 (エンドユーザー Flash Player 7 以上が必要。) 「SWF、JPEGファイルを読み込みたい(FlashMX2004以降) 」 http://hakuhin.hp.infoseek.co.jp/main/as/import.html#IMPORT_03 MovieClipLoaderクラスについて http://www.fumiononaka.com/TechNotes/Flash/FN0501003.html しかし,MovieClipLoader が _level1 に使える物かどうかやったことがないのでよくわかりません。 普通は _level ではなく ムービークリップ をターゲットとして読み込むときに使うものだと思いますから。 以上のようにすると, 普通に考えて,予測できる2つの障壁をなんとかクリアーすることができます。 私は実際にやってみていません。 実際にしてみるには,実際のデータを元に,アップロードしてみないとわからない面もあります。 上の2つの障壁があることは確かですが,実際にやってみると他にまだ障壁があるかもしれません。 ===代替案======================== >> 次へ行くボタンを押して次のムービーのアタマへ進む時は >> loadMovieNum("ddd.swf", 0);で移動するのですが、 →次へ行くボタンを押して次のムービーのアタマへ進む時は そのまま loadMovieNum("ddd.swf", 0); で移動する。 >> 前へ戻るボタンを押した時に、 >> 前のムービーの後ろのほうに配置したラベルの位置から >> 再生させたい →前へ戻るボタンを押した時は "ラベル3" 以前のフレームをカットしたSWF(仮称 ddd2.swf) を作成し loadMovieNum("ddd2.swf", 0); でロードする。 というのはどうでしょうか。 往き道と帰り道を違う物にするのです。 aaa.swf → bbb.swf → ccc.swf → ddd.swf → eee.swf aaa2.swf ←bbb2.swf ←ccc2.swf ←ddd2.swf ←┘ 作成は手間ですが, そんなに頭や気を遣う必要はなくなります。
お礼
詳細なご回答ありがとうございました。 バージョンも書かずにすみません。バージョンは8でした。 前にDirectorを使っていて、こちらだと簡単にそういう事が出来ていたので、とまどってしまいました。お書きいただいた方法試してみたいと思います。本当にありがとうございました。
補足
sassakunさまのご回答を手がかりに、また色々調べてみましたら、なんとか解決しました。下記の質問サイトに、ほとんど同じ質問をした方がいたようで、、。 完全にロードされないとラベルには飛ばないというところも盲点でした。ありがとうございます。 http://www.flash-jp.com/modules/newbb/viewprint.php?order=ASC&topic_id=2199&forum=11&PHPSESSID=e68f0cabc73ff30d7ae2320ee3d00389