利用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;


		}
	}
}

转载于:https://www.cnblogs.com/JD85/archive/2010/03/29/1699931.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值