• ベストアンサー

しばらく真っ白な画面になってしまいます。

mx2004です 2メガほどあるswfに読み込み画面を作りました。 他のサイトを見ると、すぐにローディング中と出るのに、私が作ったフラッシュだけ、20秒くらい真っ白い表示で、70パーセントぐらいからようやく%表示が出てきます。それからは普通に100まで増えていきます。 最初に真っ白な画面が続いてしまうのはなぜでしょう、何か考えられる原因はありますか? 読み込み中ということを、見ている人にわかってもらいたいです

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.3

おそらく、フレーム1に大量のデータが書き出されていて読み込みに時間がかかり、続く Now Loading アニメがなかなか始まらなくなっているのだと思います。 サウンドやムービークリップを、attachSound や attachMovie で動的に挿入していませんでしょうか。 スクリプトで動的にインスタンスを挿入するには、「リンケージ」という設定が必要です。 リンケージを設定したシンボルがある場合は、「リンケージプロパティ」を確認してみてください。「最初のフレームに書き出し」にチェックが入っていませんでしょうか? これにチェックが入っていると、シンボルのデータが全てフレーム1に書き出され、フレーム1の容量が大きくなってしまいます。特に、サウンドシンボルやビットマップ系画像を使ったシンボルは音や画像の巨大なデータがフレーム1に書き出されることになりますので、ご注意ください。 「最初のフレームに書き出し」は、「 ActionScript に書き出し」を選んだ時に同時にチェックが入るようになっています。チェックが入っている場合は、チェックを外してください。 「最初のフレームに書き出し」を選ばなかったシンボルはムービーに書き出されず、スクリプトで挿入しようとしても、シンボルが未定義扱いになって失敗してしまいます。 しかし、シンボルのインスタンスをタイムラインを使って挿入してあれば、シンボルのデータは、そのインスタンスが初めてステージに登場するフレームに書き出されます。 (インスタンスを複数のフレームに配置していても、シンボルのデータが書き出されるのは1回だけです) 例えば Now Loading アニメをフレーム3まで作っているのなら、フレーム4にサウンドを挿入すれば、サウンドシンボルのデータはフレーム4に書き出され、フレーム1の容量を軽くすることができます。 ただ、これではフレーム4が再生された時に音が鳴ってしまいますから、「同期:」のリストから「ストップ」を選んで、鳴らないようにしておきます。 つまり、シンボルのデータをフレーム1以外に書き出すために、どこか別のフレームにダミーのインスタンスを配置し、普段はこれが再生されないようにしておくということです。 attachMovie で動的に挿入するために「リンケージ」を設定したムービークリップシンボルが多数あって、これらが全てフレーム1に書き出されては困る場合は、同じ要領で、フレーム1以外のフレームに書き出されるようにしてはいかがでしょう。 Now Loading アニメの次のフレームをシンボルを書き出すための専用のフレームにし、ここにシンボルをまとめて配置しておくと、「リンケージ」を設定したシンボルのデータを一括してこのフレームで読み込めます。 例えば Now Loading アニメを2フレームで作ったとすると、フレーム3をシンボルの書き出し用に充て、リンケージを設定したシンボル全てのインスタンスをここにダミーとして配置し、実際のムービーはフレーム4から作ります。 ムービーの読み込みが完了したら、フレーム3を飛ばしてフレーム4に行くようにすれば、ダミーを非表示にする手間を省くことができます。 ------------------------------------------------------ ところで、Now Loading のスクリプトですが。 プログレスバーのインスタンス名を prog_bar だとすると、フレーム1を空白にし、フレーム2に  //完了率の算出  loaded = _root.getBytesLoaded();  total = _root.getBytesTotal();  per = Math.floor( loaded / total * 100 );  //プログレスバーの描画  prog_bar._xscale = per;  //読み込み完了を待つ  if( per < 100 )  {   gotoAndPlay( _currentframe - 1 );  }  //完了したらタイトル画面を表示  else  {   gotoAndPlay( "title" );  } (↑各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください) とすれば、スクリプトが1箇所にまとまります。 fscommand は一般的にはスタンドアロンプレイヤー( swf ファイルを直接立ち上げた時に起動するプレイヤー)に対する指示であって、HTML ページに組み込んで表示する時は意味を持ちません。 例えば  fscommand( "fullscreen" , "true" ); これはフルスクリーンで再生するという意味ですが、HTML で再生する swf ファイルにこのスクリプトを組み込んでも、フルスクリーンにはなりません。 しかし、このスクリプトを組み込んだ swf ファイルをダブルクリックして再生してみると、フルスクリーン表示になります。 showmenu も同様で、fscommand で指定したからといって右クリックのメニューが2項目だけに限定されるわけではありません。 メニューの表示を制御するには HTML のタグで指定するか、  Stage.showMenu = false; というスクリプトをどこかで実行してください。 ちなみに、fscommand は本来は JavaScript や他のアプリケーションと Flash を連携させるための仲介役として用意されているもので、他にも様々な使い方があります。 この話は長くなりますので、またの機会に。

miku2
質問者

お礼

ライブラリで、リンケージプロパティを見てみたら、なんと20個ほどのムービークリップが「最初のフレームに書き出し」になってました!! ほとんどのムービークリップをアクションスクリプトで呼び出すようにしてたので・・ これじゃあ、最初に読み込むのに時間がかかりすぎますよね。納得です! そのチェックを全て外し、おっしゃるように3フレーム目にそのインスタンスをダミーで置いておきました。 今、サーバーにアップしたところですが、ローディングが1パーセントから表示されてます!!!感激です! 丁寧に説明していただいたので、理解ができ、とても勉強になりました。そしてすごく助かりました。ありがとうございました!!

その他の回答 (2)

noname#35109
noname#35109
回答No.2

前に書いていらしたスクリプトですが, 不可解な部分が多く,少しの書き直しをどうすれば良いか考えているうちに今日に至ってしまいました。 結構書き換えてもいいのですね。 >> ☆1フレーム目 >> fscommand("showmenu", "false"); >> fscommand("allowscale", "false"); >> fscommand("fullscreen", "false"); >> flag=0; ここは,fscommand("showmenu", "false");以外,意味不明なのでノーコメント。 2フレーム目,3フレーム目は,ループしているのにさらにenterFrameを使っているところがよくわかりません。 もう少しシンプルに,MCの中だけにスクリプトを書いてみます。 元は, ------------------------------------------ onClipEvent (enterFrame) { _xscale=(_root.parcent/100)*100; } ------------------------------------------ こう書かれているMCを以下のように書き換え↓ ------------------------------------------ onClipEvent (load) { _root.stop(); } onClipEvent (enterFrame) { _root.parcent = int((_root.getBytesLoaded()/_root.getBytesTotal())*100); _xscale = (_root.parcent/100)*100; if (_root.getBytesLoaded()>=_root.getBytesTotal()) { _root.gotoAndPlay("title"); } } ---------------------------------------------- なるべく元のままのスクリプトを残しています。 つまり,これで行くと2フレーム目3フレーム目のスクリプトは一切いりません。 このMCのスクリプトだけでローディング画面を制御するのです。 一応,自サイトにUPして実験してみましたがうまく行きましたよ。

miku2
質問者

お礼

いろいろ考えていただいてありがとうございました。 一番の原因は、ムービークリップのリンケージの設定を「最初のフレームに書き出し」していたことでした。 ですが、スクリプトのおかしいところを指摘していただき勉強になりました。

  • ryanan
  • ベストアンサー率66% (2/3)
回答No.1

前回の質問についてなのですが >1~3フレームに、プログレスバーを設置~ とありますがこれは1フレーム目に設置して 2,3フレームは空白フレームになってますか? またダイナミックテキストも同じようになっているでしょうか? URL等を教えてもらえればよいのですが…。

miku2
質問者

お礼

いろいろ考えていただいてありがとうございました。

miku2
質問者

補足

1、2、3とキーフレームで区切ってないレイヤーにプログレスバーは置いてあります。 アクションスクリプト用のレイヤーは1,2,3と区切ってあります。 私は初歩的なミスをすることが多いので、たぶん何かが間違ってるのだと思いますが、調べてもわからないのでお願いします(><)