- ベストアンサー
FLASH5でのプリロード方法とは?
- FLASH5でのプリロード方法が上手くいかず投稿させて頂きました。
- 具体的にはトータル2フレームで2MB前後のファイルをプリロードしています。
- また、指定したフレームでのプリロード方法についても教えて頂けるとうれしいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
Flash 5 を使って同様の実験をしてみましたが, 何度やっても書かれているスクリプトで正常に動作します。 また,プリロードMC内に「gDownloaded」という変数名のダイナミックテキストを置いておくと, その「gDownloaded」ダイナミックテキストには,ちゃんとロード済みパーセントが表示されます。 書かれていませんから,確認ですが, プリロードのMC というのは, _root の フレーム1 だけに存在させていて, _root の フレーム2 では消していますよね。 またプリロードのスクリプトは,プリロードMC内のフレーム1に書かれていますよね。 _root の フレーム1 に stop(); を書かれていないようなので, もしプリロードのスクリプトをプリロードMC内のフレーム2に書いていたら, スクリプトはすっ飛ばされて,_root がフレーム2に進んでしまいます。 _root のフレーム2は重いはずなので,そのフレーム2の表示に時間がかかり, フレーム0からフレーム2にいきなり行くように見えます。 とにかく,stop(); が最優先です。 _root の フレーム1 に stop(); を書いて置いて, ムービー全体が読み込まれた場合だけ play(); するようにして置いた方が良いです。 それと, > トータル2フレームで2MB前後のファイルとなります。 ということは, その重い重い2MBのファイルの大半は, _root のフレーム2 に置いてあって, _root のフレーム1 は,プリロードのMC以外ほとんど何もない状態にしていますよね。 もしフレーム1が重ければ, そのフレーム1を表示させることに時間がかかり, フレーム1が表示されたとたんにフレーム2に行きますから, いきなり,フレーム2に進んだように見えますよ。 プリロードMC は,重いものをあらかじめ読み込ませて置いて, 読み込ませてから表示させるためにあるので, フレーム1(プリロードMCの置いてあるフレーム)はできるだけ軽くしてください。 でないと意味がありません。 フレーム1 には, プリロードMC 以外ほとんど置いていないような軽い状態なのに, プリロードがうまく動作しない場合もあることはあります。 attachMovie( ); や attachSound(); でライブラリからムービークリップを呼び出す場合です。 フレーム2 に attachMovie( ); を書くと確かにフレーム2でそのMCは登場しますが, ライブラリシンボルのリンケージの設定で, [このシンボルを書き出す] にした場合, 自動的にフレーム1に書き出されますから,勝手にフレーム1が重くなってしまいます。 すると,フレーム1がやたら重い状態になり,フレーム1を表示させるのに時間がかかってしまい, 表示されたとたんにフレーム2に行くので,いきなりフレーム2に進んだように見えます。 書かれていないことなので,実際にFlash5を使って実験してみていませんが, もし attachSound(); を使われているのでしたら, [このシンボルを書き出す] にチェックを入れず, 「QNo.1505484 しばらく真っ白な画面になってしまいます。」 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1505484 ↑教えて!goo ↓OKWave (同じです) http://okwave.jp/kotaeru.php3?q=1505484 で回答されている #3 の方の回答を参考にしてみてください。 MX2004での説明ですから,若干仕様はちがいますが, たいたいはそのままで参考になると思います。 ---少し気になったこと-------------------- (これは,上手くいかない直接的原因ではありあせん) > …とし、MC内で2フレームとってMC自体のループとしてます。 Flash 4 まで, スクリプトを書ける場所は,フレームとボタンだけでしたが, Flash 5 からは,ムービークリップ自体に直接スクリプトが書けます。 それも,onClipEvent というかなり使い勝手が良いイベントハンドラが用意されています。 プリロードMC のフレームのスクリプトはいったん消して, プリロードMC 内のフレームは1フレームだけにして, プリロードMC を選択→右クリック→アクション でアクションパネルを表示させて以下のように書かれては(コピペされては)いかがでしょうか。 ----------------------------------- // このMCが読み込まれたとき onClipEvent (load) { // _root をとりあえずストップさせる _root.stop(); } // 1フレーム進む時間ごとに1回ずつ実行 onClipEvent (enterFrame) { loadedSize = _root.getBytesLoaded(); totalSize = _root.getBytesTotal(); if (loadedSize>=totalSize) { _root.play(); } else { parcent = (loadedSize/totalSize)*100; gDownloaded = Math.round(parcent); _root.stop(); } } ----------------------------------- 特に onClipEvent (enterFrame) が優れものです。 フレームをループさせなくても,毎フレーム進む時間(デフォルトでは1秒間に12回), { }内を実行してくれますから,フレームをループさせる必要はなくなります。 > 指定したフレーム(途中からとか)で > プリロードさせる方法はありますでしょうか? フレームが2フレームしかなければ無理でしょう。 もっと多くのフレームがあるばあい, その途中のフレームで,_root のフレームを stop(); させて,プリロードMCをそのフレームだけに配置すれば, 残りのフレームが読み込まれるまで,そのフレームで停止しますよ。
お礼
ご回答有難う御座います。 仰るとおり、リンケージの書き出しで 1フレームが重い、というのが分かりましたので 仕方なく2フレーム目に挿入する事で回避できました。