利用MatrixTransformer类来改变对象的旋转点

显示对象的rotation属性是围绕着注册点来旋转的,而默认的注册点是(0,0),所以要让对象绕着一个设定的点旋转,比如绕着其中心点旋转,就要用到Matrix类和MatrixTransformer类。

MatrixTransformer类有两个函数:rotateAroundInternalPoint()和rotateAroundExternalPoint()

rotateAroundInternalPoint(),围绕矩阵转换空间中定义的点旋转矩阵。 此功能可以用于将影片剪辑围绕其内部的变形点进行旋转。

rotateAroundExternalPoint(),围绕矩阵转换空间以外定义的点旋转矩阵。 此功能可以用于将影片剪辑围绕其父级中的变形点进行旋转。

package {
	import fl.motion.MatrixTransformer;
	import flash.display.Sprite;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;
	import flash.geom.Point;
	import flash.geom.Matrix;
	import flash.events.Event;
	import flash.display.Graphics;


	public class test extends Sprite {
		private var container:Sprite;//容器
		private var rect:Sprite;//显示对象
		private var rectCenter:Point;//中心点
		private var rectMatrix:Matrix;//显示对象的Matrix
		private var curRectAng:Number=0;//旋转角度

		public function test() {
			container=new Sprite();
			addChild(container);
			container.x=200;
			container.y=100;
			//关于rect的旋转所操作的都是容器container

			rect=new Sprite();
			rect.graphics.beginFill(0xCCCCCC);
			rect.graphics.drawRect(0,0,50,70);
			rect.graphics.endFill();
			
			rectCenter=new Point(rect.width/2,rect.height/2);

			rect.graphics.beginFill(0x007700);
			/**
			将中心点作为旋转点,此点属于显示对象rect内部定义的点,
			如果用rotateAroundExternalPoint(),就要定义在显示对象的外部
			*/
			rect.graphics.drawCircle(rectCenter.x,rectCenter.y,5);
			rect.graphics.endFill();


			container.addChild(rect);


			rectMatrix=container.transform.matrix.clone();

			addEventListener(Event.ENTER_FRAME,onEnter);

		}
		private function onEnter(event:Event) {
			curRectAng=(curRectAng-2)%360;

			rotateRect(curRectAng);
		}
		private function rotateRect(deg:Number):void {

			var mat:Matrix=rectMatrix.clone();

			MatrixTransformer.rotateAroundInternalPoint(mat,rectCenter.x,rectCenter.y,deg);
			//MatrixTransformer.rotateAroundExternalPoint(mat,rectCenter.x,rectCenter.y,deg);

			container.transform.matrix=mat;


		}
	}
}

posted @ 2010-03-29 18:57  居家懒人  阅读(1173)  评论(0编辑  收藏  举报