QueueLoaderを使って複数画像をまとめて読み込む
QueueLoaderを使うとCASAのGroupLoadみたいに複数の画像やswf、mp3をまとめて読み込むことが出来る。簡単に説明すると、_oLoaderにaddItem()で画像等を追加した後、まとめて_oLoader.execute()で読み込みを実行するだけ。このクラスの中では各画像の読み込みを「アイテム」、トータルの読み込みを「キュー」と定義しているみたい。
_oLoader.addItem()の第1引数は画像のパス、第2引数は読込み先のオブジェクト、そして第3引数はtitleというプロパティの値を設定できる。クラス内部を見てみるとtitleというプロパティだけが存在していたので他のプロパティは付け加えられないように設計されてるようだ。ということは、この値を使って各画像のローディング状態を読込み先のムービークリップに渡してローディングバーとかに反映できるのか。これは使える。
import com.hydrotik.utils.QueueLoaderEvent;
//-----[初期設定]
var _oLoader:QueueLoader = new QueueLoader();
var imageNum:uint = 4;
//-----[読込画像を追加]
for(var i:uint = 0; i<imageNum; i++)
{
var image:Sprite = new Sprite();
image.x += 10;
addChild(image);
_oLoader.addItem("images/"+i+".jpg", image, {title:"Image "+i});
}
//-----[イベントリスナーの登録]
_oLoader.addEventListener(QueueLoaderEvent.QUEUE_START, onQueueStart, false, 0, true);
_oLoader.addEventListener(QueueLoaderEvent.ITEM_START, onItemStart, false, 0, true);
_oLoader.addEventListener(QueueLoaderEvent.ITEM_PROGRESS, onItemProgress, false, 0, true);
_oLoader.addEventListener(QueueLoaderEvent.ITEM_INIT, onItemInit, false, 0, true);
_oLoader.addEventListener(QueueLoaderEvent.ITEM_ERROR, onItemError,false, 0, true);
_oLoader.addEventListener(QueueLoaderEvent.QUEUE_PROGRESS, onQueueProgress, false, 0, true);
_oLoader.addEventListener(QueueLoaderEvent.QUEUE_INIT, onQueueInit, false, 0, true);
//-----[読込の開始]
_oLoader.execute();
function onQueueStart(event:QueueLoaderEvent):void
{
trace("キューの読込開始");
}
function onItemStart(event:QueueLoaderEvent):void
{
trace(event.title);
trace("アイテムの読込開始");
}
function onItemProgress(event:QueueLoaderEvent):void
{
trace("アイテムの読込中: "+Math.round(event.percentage * 100)+ "%");
}
function onQueueProgress(event:QueueLoaderEvent):void
{
trace("キューの読込中: "+Math.round(event.queuepercentage * 100)+ "%");
}
function onItemInit(event:QueueLoaderEvent):void
{
trace("アイテムの読込完了");
}
function onItemError(event:QueueLoaderEvent):void
{
trace("エラー");
}
function onQueueInit(event:QueueLoaderEvent):void
{
trace("キューの読込完了");
}
Thank you for Adams.
ちょっとメモ。読み込む拡張子が大文字(デジカメ写真の拡張子はなぜかJPG)だと「None Detected」となり認識してくれない。中身を見てみるとクラス側に小文字に変換するような処理が実装されてない。ということでtoLowerCase()を使って解決と。
新しいバージョンが公開されました。キューの途中でストップできたり、ガベージコレクション対応のためdispose()メソッドが追加されたみたい。これで読み込んだアイテムをメモリ上から消すことが出来るようになりました。その他もろもろ最適化されてるみたい。
最近ものすごい勢いでQueueLoaderが修正されてる。現時点でrev27。まだ詳しく見てないけどコンポーネントを使わないでFLVを読込んだり、外部サウンドのループ処理ができたりと進化してるみたい。これで読み込めるファイルは、jpg、gif、png、swf、mp3、mp4、css、xml、flvと増えてきた。近いうちに詳しいサンプルが公開されるようなので、その時にまとめて調べようかな。
http://svn.as3.casaframework.org/dev/code/org/casaframework/load/GroupLoad.as