上面这个是WPF/Silverlight中的3*3变换矩阵,其中X,Y用于改变对象的坐标;M11,M22用于对象在x,y轴上的缩放;而M12,M21用于y轴,x轴上的扭曲。
As3.0中的Matix类跟这个类似:
只不过,这个矩阵旋转了一下(行列互换了),tx,ty仍然是用于坐标的平移;a,d用于x,y方向的缩放(前提是b,c设置为0);b,c用于y,x轴上的扭曲。当然这些元素可以组合起来使用。(更详细的用法,请参阅AS3.0 Matrix )
tx,ty的平移示例:
show sourceview source print?
01
|
import fl.events.SliderEvent;
|
03
|
var box:Box = new Box();
|
04
|
var startX:Number = stage.stageWidth/2 ;
|
05
|
var startY:Number = stage.stageHeight/2 ;
|
10
|
silder_tx.addEventListener(SliderEvent.CHANGE,slider_tx_ChangeHandler);
|
11
|
silder_ty.addEventListener(SliderEvent.CHANGE,slider_ty_ChangeHandler);
|
13
|
function slider_tx_ChangeHandler(e:SliderEvent):void{
|
14
|
txt_tx.text = e.value.toString();
|
15
|
var tempMatrix:Matrix = box.transform.matrix;
|
16
|
tempMatrix.tx = startX + e.value;
|
17
|
box.transform.matrix = tempMatrix;
|
21
|
function slider_ty_ChangeHandler(e:SliderEvent):void{
|
22
|
txt_ty.text = e.value.toString();
|
23
|
var tempMatrix:Matrix = box.transform.matrix;
|
24
|
tempMatrix.ty = startY + e.value;
|
25
|
box.transform.matrix = tempMatrix;
|
a,d缩放示例:
show sourceview source print?
01
|
import fl.events.SliderEvent;
|
03
|
var box:Box = new Box();
|
04
|
var startX:Number = stage.stageWidth/2;
|
05
|
var startY:Number = stage.stageHeight/2;
|
10
|
silder_scaleX.addEventListener(SliderEvent.CHANGE,silder_scaleX_ChangeHandler);
|
11
|
silder_scaleY.addEventListener(SliderEvent.CHANGE,silder_scaleY_ChangeHandler);
|
13
|
function silder_scaleX_ChangeHandler(e:SliderEvent):void{
|
14
|
txt_tx.text = e.value.toString();
|
15
|
var tempMatrix:Matrix = box.transform.matrix;
|
16
|
tempMatrix.a = e.value;//x轴缩放
|
17
|
box.transform.matrix = tempMatrix;
|
21
|
function silder_scaleY_ChangeHandler(e:SliderEvent):void{
|
22
|
txt_ty.text = e.value.toString();
|
23
|
var tempMatrix:Matrix = box.transform.matrix;
|
24
|
tempMatrix.d = e.value; //y轴缩放
|
25
|
box.transform.matrix = tempMatrix;
|
a,b,c,d 旋转示例:
show sourceview source print?
01
|
import fl.events.SliderEvent;
|
03
|
var box:Box = new Box(50,100,0x00ff00);
|
04
|
var startX:Number = stage.stageWidth/2 ;
|
05
|
var startY:Number = stage.stageHeight/2 ;
|
10
|
var box2:Box = new Box(100,75,0xff6600);
|
16
|
silder_Angle.addEventListener(SliderEvent.CHANGE,silder_Angle_ChangeHandler);
|
18
|
function silder_Angle_ChangeHandler(e:SliderEvent):void{
|
19
|
txt_tx.text = e.value.toString();
|
21
|
var angle = e.value * Math.PI /180;
|
24
|
var sin = Math.sin(angle);
|
25
|
var cos = Math.cos(angle);
|
27
|
var tempMatrix:Matrix = box.transform.matrix;
|
32
|
box.transform.matrix = tempMatrix;
|
33
|
box2.transform.matrix = tempMatrix;
|
b,c 倾斜示例:
show sourceview source print?
01
|
import fl.events.SliderEvent;
|
03
|
var box:Box = new Box(50,50);
|
04
|
var startX:Number = stage.stageWidth/2 ;
|
05
|
var startY:Number = stage.stageHeight/2 ;
|
10
|
silder_skewX.addEventListener(SliderEvent.CHANGE,silder_skewX_ChangeHandler);
|
12
|
function silder_skewX_ChangeHandler(e:SliderEvent):void{
|
13
|
txt_tx.text = e.value.toString();
|
14
|
var angle = e.value * Math.PI /180;
|
15
|
var tan = Math.tan(angle);
|
16
|
var tempMatrix:Matrix = box.transform.matrix;
|
18
|
box.transform.matrix = tempMatrix;
|
22
|
silder_skewY.addEventListener(SliderEvent.CHANGE,silder_skewY_ChangeHandler);
|
24
|
function silder_skewY_ChangeHandler(e:SliderEvent):void{
|
25
|
txt_ty.text = e.value.toString();
|
26
|
var angle = e.value * Math.PI /180;
|
27
|
var tan = Math.tan(angle);
|
28
|
var tempMatrix:Matrix = box.transform.matrix;
|
30
|
box.transform.matrix = tempMatrix;
|