プロが教える店舗&オフィスのセキュリティ対策術

こんばんは。お世話になります。
今つくっているのは、ソフトのデモムービーのようなものなのですが、進行に応じてラベルごとに進むようにしています。
これが何本かあり、ボタンを押してそれぞれにジャンプするようにしています。

ここで、次へ行くボタンを押して次のムービーのアタマへ進む時は
loadMovieNum("ddd.swf", 0);で移動するのですが、

前へ戻るボタンを押した時に、前のムービーの後ろのほうに配置したラベルの位置から再生させたい時にはどうしたらいいか困っています。
そのまま続けて下記のように書いてもダメなようなのですが、なにか良い手はありませんでしょうか?
そもそも、こういった作り方はしないものなのでしょうか?

on (release) {
loadMovieNum("ddd.swf", 0);
gotoAndPlay("ラベル3");
}

すみませんが、よろしくお願いします。

A 回答 (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. …
MovieClipLoaderクラスについて
http://www.fumiononaka.com/TechNotes/Flash/FN050 …

しかし,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 ←┘

作成は手間ですが,
そんなに頭や気を遣う必要はなくなります。

この回答への補足

sassakunさまのご回答を手がかりに、また色々調べてみましたら、なんとか解決しました。下記の質問サイトに、ほとんど同じ質問をした方がいたようで、、。
完全にロードされないとラベルには飛ばないというところも盲点でした。ありがとうございます。

http://www.flash-jp.com/modules/newbb/viewprint. …

補足日時:2006/03/20 22:38
    • good
    • 0
この回答へのお礼

詳細なご回答ありがとうございました。
バージョンも書かずにすみません。バージョンは8でした。
前にDirectorを使っていて、こちらだと簡単にそういう事が出来ていたので、とまどってしまいました。お書きいただいた方法試してみたいと思います。本当にありがとうございました。

お礼日時:2006/03/20 19:26

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