zoukankan      html  css  js  c++  java
  • 利用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;
    
    
    		}
    	}
    }
    
    
  • 相关阅读:
    第十五周总结
    第二阶段冲刺
    课堂练习
    第十四周总结
    WP8 NavigationInTransition实现页面切换效果
    WP8学习笔记:如何在页面显示前自动转向到其他页面
    WP8简单的计算器
    WP8滑动条(Slider)控件的使用
    Wp8滚动区域(ScrollViewer)控件的使用
    C#中ToString格式大全
  • 原文地址:https://www.cnblogs.com/JD85/p/1699931.html
Copyright © 2011-2022 走看看