In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

Bimap高速に変形する方法。

いまさらながら。。。。。最近他の人のコードをみてて、思ったこと。

でかいビットマップを扱うときにFlashCS3,4上でオーサリングすると
スプライトやムービークリップに内包する形で動かすことが一般的だと
思っていました。ただ、画像が大きいと動かすときに必ず横方向にジャミる。
体感的に負荷も重そうに見えます。

なんで、スプライトのビットマップの塗りをmatrix使って位置の移動や
拡大縮小する方法を見つけたとき、その速さというかレスポンスにびびった。
Get Adobe Flash player
by okmt_masaaki 17 Apr 2010
/**
 * Copyright okmt_masaaki ( http://wonderfl.net/user/okmt_masaaki )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/2MdE
 */

/*

いまさらながら。。。。。最近他の人のコードをみてて、思ったこと。

でかいビットマップを扱うときにFlashCS3,4上でオーサリングすると
スプライトやムービークリップに内包する形で動かすことが一般的だと
思っていました。ただ、画像が大きいと動かすときに必ず横方向にジャミる。
体感的に負荷も重そうに見えます。

なんで、スプライトのビットマップの塗りをmatrix使って位置の移動や
拡大縮小する方法を見つけたとき、その速さというかレスポンスにびびった。

*/

package {
    import flash.display.Sprite;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.net.URLRequest;
	import flash.system.LoaderContext;
    import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.geom.Matrix;
	
    public class FlashTest extends Sprite {
    		private var _sp:Sprite;
    		private var _bmpdata:BitmapData;
    		
        public function FlashTest() {
        		stage.scaleMode = StageScaleMode.NO_SCALE;
        		stage.align = StageAlign.TOP_LEFT;
        	
            var myLoader:Loader = new Loader();
			var myURLRequest:URLRequest = new URLRequest("http://farm3.static.flickr.com/2523/4059941992_91d11298cd_o.jpg");
			var myLoaderContext:LoaderContext = new LoaderContext(true);
			myLoader.load(myURLRequest , myLoaderContext);
			myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void
			{
				_bmpdata = new BitmapData(e.target.content.bitmapData.width,e.target.content.bitmapData.height);
				_bmpdata.draw(e.target.content);
				
				_sp = new Sprite();
				addChild(_sp);
				onMouseMove();
				
				stage.addEventListener(Event.RESIZE,onResize);
				stage.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);
			});	
        }
        private function onMouseMove(e:MouseEvent = null):void
        {

        		var moveX:Number = stage.mouseX/stage.stageWidth;
        		var moveY:Number = stage.mouseY/stage.stageHeight;
        		
        		var mtx:Matrix = new Matrix();
			mtx.translate((stage.stageWidth-_bmpdata.width)*moveX,(stage.stageHeight-_bmpdata.height)*moveY);
        		_sp.graphics.clear();
        		_sp.graphics.beginBitmapFill(_bmpdata,mtx,true,true);
        		_sp.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
        		
        };
        
        private function onResize(e:Event = null):void
        {
			_bmpdata.dispose();
			_bmpdata = new BitmapData(stage.stageWidth,stage.stageHeight);
			onMouseMove();
        }
     }
}