ちょっと面倒な複数のプログレスをまとめるクラス
たくさん外部ファイルを読み込むコンテンツを作る際、複数のプログレスからローディングの表示ををまとめるのってちょっと面倒。
あらゆるProgressEvent?をまとめちゃおうというクラス
リポジトリ
http://www.libspark.org/svn/as3/MultiProgressManager
ライセンス
MIT
使い方
- MultiProgressManager?のインスタンスを作って
- それぞれのプログレスを見張るをモデルを突っ込むと、
- 全部をまとめて0~1までに変換された進捗率が吐き出されます
- あとはMultiProgressManager?が吐き出すプログレスイベントとコンプリートイベントを見張って、パーセント表示を更新してください!
_progressManager = new MultiProgressManager();
//ローダーのプログレスを70%に設定して突っ込む
var loader:Loader = new Loader();
var model:AbstractProgressModel = new ProgressEventModel(loader.contentLoaderInfo, 0.7);
_progressManager.addProgress(model);
//他の素材読み込みを残り30%に割り当てて突っ込む
var urlLoader:URLLoader = new URLLoader();
_progressManager.addProgress(new ProgressEventModel(urlLoader, 0.3);
//読み込み開始
_progressManager.start();
loader.load(new URLRequest("main.swf"));
urlLoader.load(new URLRequest("config.xml"));
//このイベントにまとめられたパーセントのプログレスが入っています。
_progressManager.addEventListener(ProgressPercentEvent.PERCENT_PROGRESS, progressHandler);
//パーセントの完了イベント
_progressManager.addEventListener(ProgressPercentEvent.PERCENT_COMPLETE, completeHandler);
//プログレスのイベントハンドラ
private function progressHandler(event:ProgressPercentEvent):void
{
//パーセント表示を更新
loadingBar_mc.scaleX = event.percent; //event.percentは0~1までのNumber
}
いろんなプログレスに対応できる
AbstractProgressModel?を継承すれば、Flash標準のプログレスイベント以外にも対応できます。
考えるのは2点だけ!
- progressイベントをリスンすることを書く
- 完了したときの処理を書く
サンプルファイル
http://www.libspark.org/svn/as3/MultiProgressManager/trunk/sample/
このサンプルでは
- preloader.swf起動
- main.swf読み込み
- 設定xml読み込み
- 複数画像の読み込み
- パーセント表示の終了処理
- main.swfの表示開始
という流れでプログレスをまとめています。
未対応とか悩み中
- エンターフレームで監視しているときに、常にProgressPercentEvent?.PERCENT_PROGRESSを飛ばしている(以前のフレームと比較して、パーセントに変化がなければ飛ばさなくてもいいかも)
- IOエラーなどは監視していない(これは監視しなくてもいい?ロードしてる本体が処理すべき?)
- キャンセルがちょっと雑?

