swfファイルを読み込む際に、ダウンロード状況をパーセンテージやローディングバーで表示することがよくありますが、容量が大きくなってくると、最初から読み込み状況が表示されず、表示されたときにはすでに70%読み込まれていた、という現象に遭遇します。

そんなときの対処法は以下のとおり。

 

通常なら、Flashライブラリ内にあるステージ上に配置していないムービークリップ(以下、MC)は書き出されたswfファイル内には含まれませんが、attachMovieメソッドなどでステージ上に配置するためにリンケージ設定してある場合はちょっと違うようです。

リンケージプロパティで「ActionScriptに書き出し」にチェックを入れると自動的に、「最初のフレームに書き出し」にもチェックが入ります。「最初のフレームに書き出し」にチェックが入っていると、swfを読み込んで最初のフレームでMCを読み込もうとするため、チェックが入ったMCをすべて読み込むまでそのフレームの内容は表示されません。ということは、読み込み状況を表すローディングバーも含め、何も表示されない訳です。

この状況を回避するために、まず下記の画像のように、「最初のフレームに書き出し」チェックボックスを外します。

080410_linkage

 

チェックを外しただけだと、パブリッシュしても実際にattachMovieされないので、ステージ上にattachMovieするMCをあらかじめ配置しておきます。

配置するフレームは、読み込み状況を監視するフレームと、読み込みが完了した後に移動するフレームとの間のフレームに、ばらばらと配置します。 

080410timeline

上図ではなぜ2つのフレームに分けて配置しているかというと、各フレームでの読み込み容量を拡散させるためです。

 

080410_graf

この図では、フレームごとのデータ量を見れば、うまく拡散されている様子が分かると思います。(プロファイラ>フレーム毎のデータ量グラフ)

1フレーム目に読み込むデータ量の差は、歴然ですね。

 

ユーザーがページを開いてくれたとき、すぐに「読み込み中・・」という表示や、待ち時間を感じさせない工夫なんかがあれば、少しの間でも辛抱してくれると思います。

ですが、ほんの数秒でも本当になにも表示されなかったりすると、「なにもないページ」と判断されてすぐに他のページに遷移してしまう恐れがありますよね。

個人的にはローディング状況をパーセンテージやバーの長さで表現するのは無機質すぎてあまり好きではありません。ですが、今回のような現象が起きてしまう場合は、それ以前の問題かと思います。ぜひとも対処しておきたい点ですね。

HTML5飯