- ベストアンサー
外部swfファイルを読み込み任意のフレームにジャンプしたい
重複質問でしたらすみません。。。 _rootに「メニュー」というムービークリップをおきました。 その中にボタンをいくつか配置してある状態です。 ボタンを押すと_rootへ外部swfを読み込むようにし、loadMovieを使い読み込みには成功しました。 その際に ボタン1⇒外部ファイル1のフレーム1 ボタン2⇒外部ファイル1のフレーム10 というように、ボタンによって同じ外部ファイルの違ったフレームへジャンプさせたいのですがうまくいきません。 このような場合はどうしたらよいのでしょうか。 アドバイスがありましたらお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
私もしばらくどうやったらできるのか考えていました。 普通に実験してもうまく行きませんし。 しかし,制約が付きですが,なんとかできます。 読み込む側のボタンのスクリプト↓。 ------------------------------ on (press) { loadMovie("3章テスト.swf?frm=10", "_root"); } ------------------------------ swf の後に ? と 変数名(frm)=値(10) を付け加えます。 フレーム10 に行かせるボタンの場合です。 読み込まれる側(3章テスト.swf)の フレーム1 のスクリプト↓ ------------------------------ // とりあえずストップ this.stop(); // 1フレーム進む時間ごとに毎回{ }内を実行 this.onEnterFrame = function() { // もし全てのロードが完了したら if (this.getBytesLoaded()>=this.getBytesTotal()) { // ムービーを変数フレームに進める this.gotoAndPlay(frm); // この onEnterFrame を削除 delete (this.onEnterFrame); // ロード未完了の場合は ストップ を継続 } else { this.stop(); } }; ------------------------------ こんな感じです。 ただし,制約として,これはムービープレビューやスタンドアローンプレーヤーでは検証できません。 つまり,使えません。 上の場合,変数をGETで渡していますが,POSTで渡しても同様です。検証できません。 サイトによっては,アップしないと検証できないと書いてあるところもありますが, 私の環境では,ブラウザ(IE)でswfファイルを開くか, ブラウザでswfと同時にパブリッシュされたHTMLを開くとローカルで検証できました。 _root (_level0) に読み込んで, 任意のフレームにジャンプということは普通はしません。 _root (_level0) に読み込むと言うことは,親元のファイルのプロパティなど親の全てがなくなります。 _root (_level0) でなければ,親内に子を読み込めるので, 普通に変数も渡せますし,読み込み待ち処理もできます。 しかし _root (_level0) だと,その両方が素直にできなくなるので,大変やっかいです。 やっかいのダブルパンチです。 上記スクリプトの説明ですが, まず,ボタンのスクリプトで, 「3章テスト.swf」をロードすると同時に,frm=10 という変数&値を「3章テスト.swf」に渡します。 ロードされた側は表示された時点でまだロードは完了していません。 ですから,いきなり フレーム10 に goto などと命令されても,そんなフレームはないのでどこにも行けません。 なので, 「3章テスト.swf」のフレーム1に 「ロードが完了次第,フレームfrm つまり フレーム10 に goto しなさい」と書いてあります。 これでうまく行くと思います。 なお,ご存じだとは思いますが, アップする場合,「3章テスト.swf」というファイル名は使えません。 「test_chapter3.swf」など半角英数文字のファイル名にしてくだい。 アップせずに,ローカルで使用する場合はブラウザに表示させるしかありません。 もしスタンドアローンプレーヤーやプロジェクタ(EXEファイル)にパブリッシュして使用する場合は, 上記方法ではうまく行かないと思います。 なんとか,変数を別の物を経由して渡さないとなりません。 別の物を経由する方法で, 今,思いつくものは親ムービーから SharedObject で,sol ファイルに変数を保存し, その solファイルを「3章テスト.swf」から読みに行き,ロードを待ってgotoするという方法です。 「SharedObject.getLocal」 http://www.fumiononaka.com/TechNotes/Flash/FN0204003.html しかし, 親の _root にロードした子に,SharedObject を使って変数を渡すなどと言うことは, それこそ,普通は絶対にしない方法ですし, 今は,考えてみただけで実際に作って検証したわけではありません。 「親からsolを保存→瞬時に子からsolの読み込み」 ですからね,普通はしません。 もし,そういう,さらに超変わったことをしたい場合で,なおかつ SharedObject の使い方などがわからない場合は, 補足してください。 また時間がかかるかもしれませんが,考えて実験してみたいとは思います。 考えても実験失敗で,回答できない可能性もありますけどね。
その他の回答 (1)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
「ボタンを押すと_rootへ外部swfを読み込むようにし、」 と書かれている点を考えると、外部swfが表示されたときには、その元あったボタンは消えると思いますが, そういう状態で合っていますでしょうか? _rootへ読み込む場合は、 ボタンによって同じ外部ファイルの違ったフレームへジャンプさせることは無理かと思われます。 ・ できれば、書かれた loadMovie の部分のスクリプトだけでも良いので提示してください。 ・ また、読み込む場所は _root 以外でも良いのかどうかを回答してください。 ・ また、Flashのバージョンを書いてください。 答えられる範囲でかまいませんので、上記3点の補足説明をおねがいします。
補足
回答ありがとうございます。 元にあったボタンは消える状態です。 3点補足します。 スプリクトについては、ボタン1⇒フレーム1の状態 on (press) { loadMovie("3章テスト.swf", "_root"); } を記述してあるだけに今はなっています。 (色々試したものは消えてしまいました。。。) 変数をつけてみたらと思いやってみたり、外部ファイルをシーンに分けてやってみたり色々してみましたが、記述方法が適切でないせいか失敗しています。(スプリクトは初心者です) (何がよかったのかシーン2へジャンプできた時がありました。しかし、他のシーンへ飛べないので断念しました。) また、読み込む場所はできれば_rootにしたいと思います。 Flashのバージョンは8proを使っています。 お願いします。