| Refresh | Home EGTry.com

use mouse wheel to scale display object


WheelScale.as

package {
	import flash.display.Graphics;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.geom.Matrix;
	import flash.geom.Point;

	public class WheelScale extends Sprite
	{

		private var canvas:Sprite;
		public function WheelScale()
		{
			canvas=createRect();
			canvas.addEventListener(MouseEvent.MOUSE_WHEEL, onWheel);
		}
		
		private function onWheel(event:MouseEvent):void {
			
				if (event.delta>1) {
					trace("wheel up");
					scaleAt(2, event.localX, event.localY);
					//this.scaleX=this.scaleX*2;
					//this.scaleY=this.scaleY*2;
				} else {
					trace("wheel down");
					scaleAt(0.5, event.localX, event.localY);
					//this.scaleX=this.scaleX*0.5;
					//this.scaleY=this.scaleY*0.5;
				}
			
		}
		
		private function createRect():Sprite {
			var sprite:Sprite=new Sprite();
			addChild(sprite);
			var g:Graphics=sprite.graphics;
			g.beginFill(0xffffff,1);
			g.drawRect(10,50,300,200);
			g.endFill();
		
			g.lineStyle(1,0xff0000);
			for(var i:int=1; i<10; i++) {
				g.drawRect(10,50,30*i,20*i);
			}
			
			//sprite.scaleX=4;
			//sprite.scaleY=4;
			return sprite;
		}
		
		private function scaleAt(scale:Number, localX:Number, localY:Number):void {
			var m:Matrix=new Matrix();
			var gPoint:Point=canvas.localToGlobal(new Point(localX, localY));
			m.translate(-gPoint.x, -gPoint.y);
			m.scale(scale,scale);
			m.translate(gPoint.x, gPoint.y);
			trace("scale matrix: "+m);
			var oldM:Matrix=canvas.transform.matrix;
			trace("before matrix: "+oldM);
			oldM.concat(m);
			trace("after matrix: "+oldM);
			canvas.transform.matrix=oldM;
		}
	}
}