雨と風と快晴と 2.0

個人の勉強とPCライフに役立つツールをめざすブログ。
個人としてはWebクリエイターとして活躍中(?)。

ActionScript3.0 1つのSWFでローディング

2010年04月25日 | プログラミング

ローディング処理で悩んでいたが、やっと解決。

AS2の時は普通に1フレーム目(シーン1とか)にローディングのスクリプトを書いて、gotoAndStop(2)で2フレーム目に飛ばす方法で1つのFlash内でローディングを行っていた。タイムラインベースで処理をしていたからできた技。

しかし、AS3を始めてからはクラス定義をして.asファイルで何でもやろうとしているため、ローディングはプリローダswfを用意して読み込ませる方法や、自分自身をローダーと最小限のコンテンツに抑え、別途外部のSWFや画像を子としてロードしてやる方法で対応していた。

で、どうしてもちょっと重めのコンテンツを1つのSWFで実装しなければならなかったため、悩んだ末、ある方法を思いついた。


まずは、Flash自体のドキュメントクラス定義はここでは設定しない。
そして、1フレーム目にローディングのスクリプトを書いてしまう。
ローディングが完了したらgotoAndStop(2) で2フレーム目に。(ここはAS2の時と一緒)


this.stop();
var info : LoaderInfo = root.loaderInfo;
info.addEventListener(ProgressEvent.PROGRESS, updateLoadingBar);
info.addEventListener(Event.COMPLETE, displayContent);

function updateLoadingBar(event){
  // ローディングバーを動かす処理
}

function displayContent(event){
  this.gotoAndStop(2);
}



続いて、2フレーム目にはコンテンツを配置。この時、ばらばらに配置するのではなく、すべてのコンテンツをMovieClipとしてラップし、リンケージのクラスで、Flash自体に定義する予定だったクラスを割り当てる。
重要なのは「1フレーム目に書き出し」のチェックを外すこと。これをしないと、文字通り1フレーム目に書き出されるため、ローディングバーの表示タイミングが遅れ、表示と同時にローディング終了という意味のない結果に・・・。



あとは通常通りにasファイルにスクリプトを記述するだけでよい。
他のクラスの読み込みなども、多分、問題ないはず。

っていうか、良く見たらAS2の時とやり方としては同じだった。
だとすると、みんな当たり前にこの方法でやっているってこと?実は今さらな感じかも。

書いていて気付いたが、1フレーム目のローディング中のスクリプトも、別にFlash内に書かなくてもFlash自体のドキュメントクラス定義のas(コンテンツとは別のas)に記述しても良いかも。全てasで管理した方が分かりやすいかな?後でやってみよう。


最新の画像もっと見る