ActionScript3でモザイクイン

AS3でモザイクインを実装してみた。
と言っても、AS2のソースをAS3で書き直してみただけです。。

見た目はこんな感じ。
SWFをそのまま表示させたい・・
この4段階の画像を作るの苦労したなぁwww



はい!チョッパ〜♪


以下、スクリプト

Root.as

package {

	import flash.display.Sprite;
	import flash.display.StageAlign;

	public class Root extends Sprite {

		public function Root():void {

			stage.scaleMode = "noScale";
			stage.align = StageAlign.TOP_LEFT;

			addChild(new SampleImage());
		}
	}
}

SampleImage.as

package {

	import flash.display.Sprite;
	import flash.display.Loader;
	import flash.events.Event;
	import flash.net.URLRequest;

	public class SampleImage extends Sprite {

		public function SampleImage():void {

			var loader:Loader = new Loader();
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
			loader.load(new URLRequest("photo.jpg"));
			addChild(loader);
		}

		private function completeHandler(e:Event):void {
			this.parent.addChild(new Mozaic(this));
		}
	}
}

Mozaic.as

package {

	import flash.display.Sprite;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.geom.Matrix;
	import flash.events.Event;

	public class Mozaic extends Sprite {

		private static const SMALL_TO:Number = 0.9;

		private var mozaicSize:Number = 100;
		private var _target:Sprite;

		public function Mozaic(target:Sprite):void {

			_target = target;
			addEventListener(Event.ENTER_FRAME, enterFrameHandler);
		}

		private function enterFrameHandler(e:Event):void {

			var mtx:Matrix = new Matrix();
			mtx.scale(1 / mozaicSize, 1 / mozaicSize);

			var bmpData:BitmapData = new BitmapData(Math.floor(_target.width / mozaicSize), Math.floor(_target.height / mozaicSize), false);
			var bmp:Bitmap = new Bitmap(bmpData);
			addChild(bmp);
			bmpData.draw(_target, mtx);

			width = _target.width;
			height = _target.height;

			if (mozaicSize == 1){
				removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
				this.parent.removeChild(this);
			}else{
				mozaicSize *= SMALL_TO;
				if (mozaicSize <= 1) {
					mozaicSize = 1;
				}
			}
		}
	}
}


AS2との大きな違いはMozaicクラスの下記の箇所のみ。

var bmpData:BitmapData = new BitmapData(Math.floor(_target.width / mozaicSize), Math.floor(_target.height / mozaicSize), false);
var bmp:Bitmap = new Bitmap(bmpData);
addChild(bmp);


AS2では作成したBitmapDataインスタンスをMovieClipにattachBitmapで終わりだけど、
AS3だとBitmapのインスタンス作成が必要になります。