電子書籍の厳選無料作品が豊富!

重複質問でしたらすみません。。。

_rootに「メニュー」というムービークリップをおきました。
その中にボタンをいくつか配置してある状態です。

ボタンを押すと_rootへ外部swfを読み込むようにし、loadMovieを使い読み込みには成功しました。

その際に
ボタン1⇒外部ファイル1のフレーム1
ボタン2⇒外部ファイル1のフレーム10
というように、ボタンによって同じ外部ファイルの違ったフレームへジャンプさせたいのですがうまくいきません。

このような場合はどうしたらよいのでしょうか。
アドバイスがありましたらお願いします。

A 回答 (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/FN020 …

しかし,
親の _root にロードした子に,SharedObject を使って変数を渡すなどと言うことは,
それこそ,普通は絶対にしない方法ですし,
今は,考えてみただけで実際に作って検証したわけではありません。
「親からsolを保存→瞬時に子からsolの読み込み」 ですからね,普通はしません。
もし,そういう,さらに超変わったことをしたい場合で,なおかつ SharedObject の使い方などがわからない場合は,
補足してください。
また時間がかかるかもしれませんが,考えて実験してみたいとは思います。
考えても実験失敗で,回答できない可能性もありますけどね。
    • good
    • 0

「ボタンを押すと_rootへ外部swfを読み込むようにし、」


と書かれている点を考えると、外部swfが表示されたときには、その元あったボタンは消えると思いますが,
そういう状態で合っていますでしょうか?

_rootへ読み込む場合は、
ボタンによって同じ外部ファイルの違ったフレームへジャンプさせることは無理かと思われます。


・ できれば、書かれた loadMovie の部分のスクリプトだけでも良いので提示してください。
・ また、読み込む場所は _root 以外でも良いのかどうかを回答してください。
・ また、Flashのバージョンを書いてください。

答えられる範囲でかまいませんので、上記3点の補足説明をおねがいします。

この回答への補足

回答ありがとうございます。
元にあったボタンは消える状態です。
3点補足します。

スプリクトについては、ボタン1⇒フレーム1の状態
on (press) {
loadMovie("3章テスト.swf", "_root");
}
を記述してあるだけに今はなっています。
(色々試したものは消えてしまいました。。。)

変数をつけてみたらと思いやってみたり、外部ファイルをシーンに分けてやってみたり色々してみましたが、記述方法が適切でないせいか失敗しています。(スプリクトは初心者です)
(何がよかったのかシーン2へジャンプできた時がありました。しかし、他のシーンへ飛べないので断念しました。)

また、読み込む場所はできれば_rootにしたいと思います。
Flashのバージョンは8proを使っています。

お願いします。

補足日時:2006/05/10 18:34
    • good
    • 0

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