続・URLLoaderで色々バイナリで読み込んでみた。

普段は大量の画像を読み込む場合にBulkLoaderを使っているんだけど、これを自作クラスで

バイナリ一括読み込み→高速表示

的な感じにならないかなーと思って実験。
140枚(中途半端)の画像を読み込み→配置。

 
// BulkLoaderバージョン
private var imgArray:Array;

 public function init(e:Event = null):void
{
	t = getTimer();
	/*
	 * BulkLoaderUtilは
	 * BulkLoaderと画像データxmlを一括読み込みするカスタムクラス。
	 */
	var l:BulkLoaderUtil = new BulkLoaderUtil("main", "images.xml", "", true); // 自動的にロード開始
	l.addEventListener(Event.COMPLETE, onLoadComplete);

}

/*
 * 読み込んだ画像をSpriteにぶちこんで配置
 */
public function onLoadComplete(e:Event):void
{
	e.target.removeEventListener(Event.COMPLETE, onLoadComplete);
	imgArray = [];
	var l:BulkLoader = BulkLoaderUtil(e.target).getLoader();
	/*
	 * ビットマップを引っ張り出す
	 */
	for each(var tgt:XML in BulkLoaderUtil.__xml..image)
	{
		imgArray.push(l.getBitmap(tgt.@id));
	}

	var n:int;

	for (var xx:int; xx < 40; xx++)
	{
		for (var yy:int; yy < 40; yy++)
		{
			if (imgArray[n] != null)
			{
				var sp:Sprite = addChildAt(new Sprite(),0) as Sprite;
				sp.addChildAt(imgArray[n], 0);
				imgArray[n].x = 50 * xx + 200;
				imgArray[n].y = 50 * yy + 200;
				n++;
			}

		}
		yy = 0;
	}
	trace("終了: ",getTimer() - t); // 結果:4300ミリ秒
}

んでこっちはバイナリで読み込み。

 
// バイナリバージョン
private var imgArray:Array;
private var bildr:BinaryImageLoader;
 
public function init(e:Event = null):void
{
	t = getTimer();

	var l:URLLoader = new URLLoader();
	l.dataFormat = "text";
	l.addEventListener(Event.COMPLETE, onXMLComplete);
	l.load(new URLRequest("images.xml"));

}

/*
 * 画像をバイナリで読み込み
 */
public function onXMLComplete(e:Event):void
{
	e.target.removeEventListener(Event.COMPLETE, onXMLComplete);
	var xml:XML = XML(e.target.data);
	bildr = new BinaryImageLoader();

	for each(var image:XML in xml.image)
	{
		bildr.add(image.@src);
	}

	bildr.addEventListener(Event.INIT, onLoadComplete);
	// 画像のバイナリデータを読み込み
	bildr.load();
}

/*
 * 読み込んだバイナリを画像に変換
 */
public function onLoadComplete(e:Event):void
{
	trace("onLoadComplete");

	var bildr:BinaryImageLoader = e.target as BinaryImageLoader;
	bildr.removeEventListener(Event.INIT, onLoadComplete);
	bildr.addEventListener(Event.COMPLETE, done);

	// 全てのバイナリデータをローダーで画像に変換
	bildr.createAllImages();
}

/*
 * 生成した画像を取得、配置
 */
public function done(e:Event):void
{
	var n:int;
	var bildr:BinaryImageLoader = e.target as BinaryImageLoader;
	imgArray = bildr.getAllImages();
	for (var xx:int; xx < 40; xx++)
	{
		for (var yy:int; yy < 40; yy++)
		{
			if (imgArray[n] != null)
			{
				addChildAt(imgArray[n], 0);
				imgArray[n].x = 50 * xx + 200;
				imgArray[n].y = 50 * yy + 200;
				n++;
			}
		}
		yy = 0;
	}

	trace("終了: ",getTimer() - t); // 結果:4880ミリ秒
}

結果、変わらなかった。むしろ後者のほうが気持ち遅い。

結局読み込み後の変換作業でLoader.loadBytes()で生成、っていうのがあるからそこで時間がかかる。
バイナリデータだけの読み込みは1秒かからないから一瞬心が躍ったのに。

あ、ちなみに画像の数だけLoaderを生成、とかはしてないですよ!

つーことで次回はzipファイル読み込みでどのくらい効率化できるか挑戦してみる。

Tags: , ,

The URL to TrackBack this entry is:

コメントをどうぞ