ちょっと面倒な複数のプログレスをまとめるクラス

たくさん外部ファイルを読み込むコンテンツを作る際、複数のプログレスからローディングの表示ををまとめるのってちょっと面倒。
あらゆるProgressEvent?をまとめちゃおうというクラス

リポジトリ

http://www.libspark.org/svn/as3/MultiProgressManager

ライセンス

MIT

使い方

  1. MultiProgressManager?のインスタンスを作って
  2. それぞれのプログレスを見張るをモデルを突っ込むと、
  3. 全部をまとめて0~1までに変換された進捗率が吐き出されます
  4. あとは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点だけ!

  1. progressイベントをリスンすることを書く
  2. 完了したときの処理を書く

サンプルファイル

http://www.libspark.org/svn/as3/MultiProgressManager/trunk/sample/

このサンプルでは

  1. preloader.swf起動
  2. main.swf読み込み
  3. 設定xml読み込み
  4. 複数画像の読み込み
  5. パーセント表示の終了処理
  6. main.swfの表示開始

という流れでプログレスをまとめています。

未対応とか悩み中

  • エンターフレームで監視しているときに、常にProgressPercentEvent?.PERCENT_PROGRESSを飛ばしている(以前のフレームと比較して、パーセントに変化がなければ飛ばさなくてもいいかも)
  • IOエラーなどは監視していない(これは監視しなくてもいい?ロードしてる本体が処理すべき?)
  • キャンセルがちょっと雑?