プロが教えるわが家の防犯対策術!

Flash5を使用して、swfを作成しております。
1フレーム目 アクション;gotoAndPlay(5);
5フレーム目 アクション;this.stop();

F12を押して、パブリッシュして作成されたHTMLファイルをみてみると、なぜか3フレーム目で止まってしまっています。
(3フレーム目のアクションは「this.stop();」)
作成されたswfファイルをダブルクリックで直接みると、ちゃんと5フレーム目になっているのですが…。

3フレーム目の「this.stop();」を削除すると、5フレーム目にいきますが、今度は、7フレーム目、9フレーム目と指定したときに、5フレーム目で止まってしまいます。

swfファイルはきちんと動作しているので、間違ってないのかなあ?と思うのですが。


やりたいことは、基本になるFlashファイルがあり、それをコピーして、コピーしたファイルは、3フレーム目からスタート、5フレーム目からスタート…としたいのです。
例;
basic.fla   ; 2フレーム目からスタート
basic_02.fla ; 3フレーム目からスタート
basic_03.fla ; 5フレーム目からスタート
basic_04.fla ; 7フレーム目からスタート
         :
         :

またパブリッシュしたHTMLファイルを表示すると、1フレーム目から、3フレーム目へ飛んでいるわけではなく、1>2>3と移動しているようです。(一瞬チラっと見える)
そうではなく、1>3としたい場合はどうしたらいいのでしょうか?

A 回答 (2件)

普通,ローカルPCで起こることはほとんどありませんが,


ネット上の SWF で,
ロードされていないフレームへの無理なジャンプをしようとしたときに起こる現象だと思います。
つまり
フレーム5 までロードされていないかもしれない状態のフレーム1で,
いきなり gotoAndPlay(5) などをするので,
フレーム5 まで一気にたどり着けずに失速停止してしまうパターンです。


ローカルPCでなぜそれが起こるのかはよくわかりませんが,
ネット上にアップすると,
無理なジャンプをしようとしたとき,まず普通に起こる失速現象だと思うので,
今のままではどっち道使えない状態だと思います。

対処するには,
いわゆるムービーのロード待ち 「NowLoading...」 のようなしくみが必要です。
Flash 5 の場合,
ムービークリップの onClipEvent (enterFrame) {} を使ってロード状態を監視するのが普通です。


簡易的な「NowLoading...」のようなものの作成方法を説明します。

フレーム1 のステージ上に,
「load_txt」 という変数名を付けた ダイナミックテキスト を用意し,
その変数名「load_txt」の テキストフィールド を ムービークリップに変換 します。

そして,
その ムービークリップ を選択した状態で,
そのムービークリップ自体に次のような スクリプト を書きます(コピペ可能)。


// このムービークリップが表示されたときに実行
onClipEvent (load) {
// _root の再生を停止
_root.stop();
}
// 1フレーム進む時間ことに毎回実行
onClipEvent (enterFrame) {
// ロードされたパーセンテージを変数 loaded に代入
loaded = Math.floor(_root.getBytesLoaded()/_root.getBytesTotal()*100);
// テキストに表示
this.load_txt = loaded+"%ロード完了";
// もし 100%ロードが完了したら
if (loaded>=100) {
// _root を 5 フレームより再生(★ 5 は書き替える)
_root.gotoAndPlay(5);
// このムービークリップを深度1000辺り(適当)に移動
this.swapDepths(1000);
// このムービークリップを削除
this.removeMovieClip();
}
}



こうすると,
ムービー全体のロード完了後に gotoAndPlay(5); するので,
途中で落下しなくなると思います。
(「NowLoading..」という文字自体はあってもなくても良いですし,
あった方が良いと思う場合はムービークリップの中などに適当に書いてください。)


※ローカルPC内の通常表示では
  このテキストはおそらく見えないか見えても一瞬です。
  ネットにアップするとロードしたパーセンテージが
  上がって行くのが見えるかもしれません。
  また「制御」→「ムービープレビュー」の
  「表示」→「ストリーミングを表示」辺りで
  確認できると思います。


参考図↓

見えない場合は OKWave よりアクセスしてください。
http://okwave.jp/qa4527303.html
「FLASHでできあがったHTMLとswf」の回答画像2
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
教えていただいた方法で、やりたいことができました。

が!別の問題が発生しました。

実は、こういうことをしています。

basic.fla   2フレーム目;メニュー1が押された状態でグレーアウト(メニュー2/3は使用可)
basic_02.fla 3フレーム目;メニュー2が押された状態でグレーアウト(メニュー1/3は使用可)
basic_03.fla 5フレーム目;メニュー3が押された状態でグレーアウト(メニュー1/2は使用可)

例えば、basic_03を開いたときに、メニュー3が押された状態で開きます。
ここはこれでいいのですが、その中でメニュー1を押したときに、また、5フレーム目へいってしまうのです。
(そうかいてあるのだから当たり前ですが。)

これを回避するためにはどうしたらいいでしょうか?
変数等を組み合わせてうまくやるしかないでしょうか?

お礼日時:2008/12/07 10:47

よく陥る罠だと思うけど 1frame目のそのscriptの後にscript自体を止める物を入れてごらん。


returnだかstopだかだったと思うけどちょっと記憶が古いので忘れた・・・

ただそのgotoを呼んだ後もscriptを続行しようとしていて、gotoと本来の続行処理が2つ現れていると考えたら良いよ。

確かそうだった筈・・・
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

1frame目のアクションスクリプトを
gotoAndPlay(5);
this.stop();

としてみたところ、意図しないところで止まってしまいました。

お礼日時:2008/12/04 10:18

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