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

浙公网安备 33010602011771号