- ベストアンサー
外部swfの読み込みでnow loading
- 過去に作成したフラッシュファイル(b.swf)を新しく作成するファイル(a.swf)に読み込ませたいが、b.swfを編集できないため困っている。
- a.swfにnow loadingを追加してb.swfを100%読み込んだら表示する方法を教えてほしい。
- どのサイズからnow loadingを追加すべきかと、TOPページに表示できるFLSAHの許容サイズについてのアドバイスも求めている。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#1です。 > _root.pleloader.visible = false; > とかを入力しなければならないのでしょうか? 正解です。 「NowLoading...」 は自体は,さっぱりどうするのかわからないため, 勝手ロード完了パーセンテージをテキストフィールドに入れてみただけです。 単にどの場所に入れるかを例で示しているだけです。 例えば,フレーム1 だけに存在する「NowLoadind...」インジケータを用意して置いて, そのインジケータはフレーム1に置き去りのまま, _root.pleloader.visible = false; などはせずに,ロード完了次第,全体は フレーム2 に進むパターンも考えられますし, _root.pleloader.visible = false; のような小手先だけで消すのではなく, 深度 0 以上に作成した 「NowLoadind...」インジケータムービークリップを, MovieClip.removeMovieClip(); で消し去る方法もありますし… とにかく様々です。 「Nowloading...」アニメは,こんなところで(テキストばかりの所で)説明するより, もっと立派でなものはいくらでも出回っていますし,それより何より自作が一番でしょう。 たとえば 「愛」という テーマのサイト もしくは Flash で, ハートマークがだんだん赤くなる(もしくは大きくなる)ような「NowLoading...」でも良いわけですし, その辺はタッチできません。 単にパーセンテージを表示してみただけのサンプルです。 普通の 「NowLoading...」 が消えるように, 普通に何かをしてくだされば良いわけです。 いきなり余談ですが… 私,個人的には「NowLoading...」は舞台裏のゴミを見ている(見られている)ようで,大変キライなのです。 #1で提示した,パーセンテージ表示など「NowLoading...」以上に,もっての他です。 本当の本当は, Flash のストリーミング再生を生かして,「NowLoading...」を使わないというのが一番だと考えます。 しかし,そうも行かないときは, 「NowLoading...」とは気づかせない「NowLoading...」や, 「NowLoading...」ではない代替の時間稼ぎを入れるように心がけています。 Flash は決して重くありません。 重くしたり,重く感じさせているのは,その Flash の作成者に問題があります。 あまり重い Flash を見た場合, その Flash 作成技術や知識の前に,Flash 作成者の人格や企業の信頼性に疑いを感じます。 つまり, 「客を大切にしてない作成者もしくは企業なんだろうな」 と。 個人的にはそう思いながらサイトを見ています。 > 35行目 // ロード完了時の処理 > の上までに入れ込めばよいでしょうか? いえ, // ロード完了時の処理 の function 内に何かしらの動作を入れれば良いと思います。 ---------------------- > ローカルではちゃんと読み込んで表示されるのに、 > サーバーにアップすると『NaN%』と表示され読み込みません。 わかりません。 実際に2つのサーバにアップして確かめてみましたが, 両方ともうまく表示しましたよ。 ファイル名に日本語など全角文字を入れていませんか? また,「a.swf」から「b.swf」へのパスは正しいですか? ちなみに, 「b.swf」へのパスは,実際には「a..swf」から見たパスではなく, 「a..swf」を貼り付けている HTML から見たパスになります。 任意のフォルダ ├ a.html (a.swfを貼り付けてあるHTML) └ image (フォルダ) ├ a.swf └ b.swf のようなファイル構造の場合, 「a.swf」から「b.swf」を読み込むときのパスは, myMCL.loadClip("b.swf", _root.myMovie); ではなくて, myMCL.loadClip("image/b.swf", _root.myMovie); になりますよ。 ブラウザで表示している HTML から見た b.swf のパスになります。 その点もよく点検してみてください。 さらにまた…・・・ クロスドメイン問題で,「a.swf」と「b.swf」が違うドメインの場合, 読み込むことは普通できません。 当たり前と言えば当たり前ですね。 自サイトの Flash を他サイトに loadMovie や MovieClipLoader で表示されるのは嫌な事です。 そういう問題を防ぐために,他サイトの Flash は自動的にロードできないように設計されています。 Flashドキュメンテーション 「SWF ファイル間のクロスドメインおよびサブドメインのアクセス」 http://livedocs.macromedia.com/flash/8_jp/main/00001618.html パスやファイル名が正しくて, パスの指定先にファイルがちゃんと存在していて, クロスドメインで無い場合は,すみませんが私にはわかりません。 借りているサーバの容量不足で, SWF が不完全にしかアップロードされていないとか, そういうすごく特殊な場合を勝手に想定するしかありません。
その他の回答 (1)
書かれているようなことをする場合, loadMovie() でゴチャゴチャするより, MovieClipLoaderクラスのメソッドを使う方が手っ取り早いです。 ただし,FlashPlayer7以上のSWFをパブリッシュしないと動作しません。 「a.swf」から「b.swf」をロードするスクリプトサンプルを書きます。 まず,ステージ上に空もしくは透明の塗りの小さなムービークリップを作成し, 「myMovie」というインスタンス名をつけてください。 この部分はご質問で書かれているURLと同じです。 そして, _root のフレームに次のように書きます。 ------------------------------------------------- // ---↓別の「NowLoading...」を用意する場合は以下不要↓--- // ロード表示テキストフィールドの作成 _root.createTextField("pleloader", 1, 0, 0, 0, 0); // テキストフィールドプロパティを設定 _root.pleloader.autoSize = true; _root.pleloader.textColor = 0x0000cc; // ---↑別の「NowLoading...」を用意する場合は以上不要↑--- // // // MovieClipLoaderインスタンス myMCL の作成 var myMCL = new MovieClipLoader(); // リスナーオブジェクト myListener の作成. var myListener = new Object(); // // ロード開始時の処理 myListener.onLoadStart = function() { _root.myMovie._visible = false; _root.myMovie.stop(); }; // // ロード中の処理 myListener.onLoadProgress = function(target, myLoadedBytes, myTotalBytes) { // // ---↓別の「NowLoading...」を用意する場合は以下不要↓--- _root.pleloader.text = Math.floor(myLoadedBytes/myTotalBytes*100)+"%"; // テキストフィールド のテキストのフォーマット var format = new TextFormat(); format.size = 16; _root.pleloader._x = (Stage.width-_root.pleloader._width)/2; _root.pleloader._y = (Stage.height-_root.pleloader._height)/2; // ---↑別の「NowLoading...」を用意する場合は以上不要↑--- // }; // // ロード完了時の処理 myListener.onLoadComplete = function() { _root.myMovie._visible = true; _root.myMovie.play(); }; // // イベントリスナーの登録 myMCL.addListener(myListener); // // 外部SWFファイル「b.swf」をインスタンス myMovie にロード myMCL.loadClip("b.swf", _root.myMovie); ----------------------------------------------- Flash 8 では,「ムービープレビュー」から,「ダウンロードのシミュレート」が正常に動作します。 「ダウンロードのシミュレート」で動作確認してください。 その他詳細は,以下のURLを参考にしてみてください。 「MovieClipLoaderクラスについて」 http://www.fumiononaka.com/TechNotes/Flash/FN0501003.html Flashドキュメンテーション 「onLoadProgress (MovieClipLoader.onLoadProgress イベントリスナー)」 http://livedocs.macromedia.com/flash/8_jp/main/00002546.html ============================================ >> TOPページに置くFLASHのサイズはどのくらいが許容範囲ですか? 物によると思います。 5分くらいあるアニメーションが ダ~~~ と流れるだけのFlash でしたら, 4MB でも 5MB でも動きがギクシャクしなければ良いと思います。 当然そのようなものに 「NowLoading...」は付けるべきではありません。 全部読み込まないと動作しないのであれば, アニメーションが始まるまでにやたら時間がかかります。 「NowLoading...」を入れるとしても, 前もって 20% くらいロードしていてスタートするようにしておけば, あとは5分間再生されている間に,ロードしきると思います。 しかし, ナビゲージョン系(インターフェイス的な物)でしたら, ボタンなどでどのフレームに飛ぶか,どのムービークリップを表示させるかわかりません。 始まっていきなり最終フレームに飛ぶようなボタンをクリックされたら,おそらく終わりです。 動作終了,Flashフリーズみたいな現象になります。 そういうことが起こらないように, ナビゲーション系Flashでは「NowLoading...」を付け全てのロードが完了してから, ボタンなどの本編を表示させるべきだと思います。 私が思うにこういう場合はせいぜい 100KB だと思います。 ですから,インターフェイス系で重くなる場合は, はたいてい,TOPの SWF は軽くしておいて, ボタンクリックによって,「次の SWF」 を「NowLoading...」付きで表示させるのが普通です。 ただし, その「次の SWF」 にボタンなどの機能が無く, ただアニメーションが ダ~~~ と流れるだけのFlash でしたら, 「NowLoading...」はない方が親切ですね。 そんな余分なものを付ける余裕があれば,もっとファイルを軽くすることに力をそそぐべきです。 「NowLoading...」付けるなんてこと自体が,容量と表示時間の無駄です。 ダウンロードシミュレートなどの機能を使って, 実際にその辺は検討してみてください。 本当に場合によります。
お礼
もう一つありました! ローカルではちゃんと読み込んで表示されるのに、 サーバーにアップすると『NaN%』と表示され読み込みません。 何ででしょう(^^;)?
補足
回答ありがとうございます! 取りあえずそのままコピペで試しました所、 難なく読み込むことが出来ました! ただ、プリローダーが消えずにそのまま表示されています。 これって _root.pleloader.visible = false; とかを入力しなければならないのでしょうか? もう一つ、この中にローディング中のアニメーション(MC)を入れるとすると、 35行目 // ロード完了時の処理 の上までに入れ込めばよいでしょうか? スミマセンがアドバイスお願いしますm(_ _)m
お礼
度々回答ありがとうございます。 表示されない件については、単純にパスミスでした。うっかりです(^^;) あと、色々読ませていただいた結果、Nowloadingではなく、 待つ間にそれと分からないように何か軽いアニメーションのPR文を入れることと致しました。 Flashって奥が深いですねぇ(笑) まだまだやりはじめですので、中々おっしゃるような物は作れませんが・・・ また質問するかもしれませんがその節はまた教えてくださいね。 為になるアドバイスありがとうございました!!