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

Mouse stalker 002

Mouse stalker with transform by flash.geom.Matrix3D
マウスを追跡するオブジェクトが、その移動距離に応じて変形する。
Matrix3D を使うことにより平行四辺形ではなく台形状の変形になる。
マウスをなるべく斜めにならないように垂直もしくは水平に動かすと、変形の具合が分かりやすい。
Get Adobe Flash player
by Aquioux 29 Jun 2009
// Mouse stalker with transform by flash.geom.Matrix3D
// マウスを追跡するオブジェクトが、その移動距離に応じて変形する。
// Matrix3D を使うことにより平行四辺形ではなく台形状の変形になる。
// マウスをなるべく斜めにならないように垂直もしくは水平に動かすと、変形の具合が分かりやすい。
package {
	/**
	 * @author YOSHIDA, Akio
	 */
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.geom.Matrix3D;
	import flash.events.Event;
	
	[SWF(width = "465", height = "465", frameRate = "45", backgroundColor = "#000000")]

	public class Main extends Sprite {
		
		private var shp:Shape;
		private var m:Matrix3D;
		private var raw:Vector.<Number>;
		private var vx:Number = 0;
		private var vy:Number = 0;
		private var spring:Number = 0.0075;
		private var friction:Number = 0.95;


		public function Main():void {
                        Wonderfl.capture_delay(10);
			shp = new Shape();
			draw(shp);
			addChild(shp);
			
			raw = new Vector.<Number>(16, true);
			m = new Matrix3D();
			
			raw = m.rawData;
			raw[12] = stage.stageWidth / 2;
			raw[13] = stage.stageHeight / 2;
			m.rawData = raw;
			
			addEventListener(Event.ENTER_FRAME, enterFrameHandler);
		}
		
		
		private function draw(target:Shape):void {
			var size:uint = 80;
			target.graphics.beginFill(Math.random()*0xffffff);
			target.graphics.drawRect(-size/2, -size/2, size, size);
			target.graphics.endFill();
		}
		
		private function enterFrameHandler(e:Event):void {
			vx += (mouseX - shp.x) * spring;
			vx *= friction;
			vy += (mouseY - shp.y) * spring;
			vy *= friction;
			
			raw = m.rawData;
			raw[12] += vx;
			raw[13] += vy;
			raw[2] = -vx * 0.15;
			raw[6] = -vy * 0.15;
			m.rawData = raw;
			shp.transform.matrix3D = m;
		}
	}
}