使用 Matrix 对象

Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本

Matrix 类表示一个转换矩阵,它确定如何将点从一个坐标空间映射到另一个坐标空间。您可以对一个显示对象执行不同的图形转换,方法是设置 Matrix 对象的属性,将该 Matrix 对象应用于 Transform 对象的 matrix 属性,然后应用该 Transform 对象作为显示对象的 transform 属性。 这些转换函数包括平移(xy 重新定位)、旋转、缩放和倾斜。

虽然可以通过直接调整 Matrix 对象的属性(abcdtxty)来定义矩阵,但更简单的方法是使用 createBox() 方法。使用此方法提供的参数可以直接定义生成的矩阵的缩放、旋转和平移效果。例如,以下代码创建一个 Matrix 对象,该对象可将某个对象水平缩放 2.0、垂直缩放 3.0、旋转 45°、向右移动(转换)10 像素并向下移动 20 像素:

var matrix:Matrix = new Matrix(); 
var scaleX:Number = 2.0; 
var scaleY:Number = 3.0; 
var rotation:Number = 2 * Math.PI * (45 / 360); 
var tx:Number = 10; 
var ty:Number = 20; 
matrix.createBox(scaleX, scaleY, rotation, tx, ty);

还可以使用 scale()rotate()translate() 方法调整 Matrix 对象的缩放、旋转和平移效果。请注意,这些方法合并了现有 Matrix 对象的值。例如,以下代码设置一个 Matrix 对象,该对象可将某个对象按缩放系数 4 进行缩放并旋转 60°,因为 scale()rotate() 方法会调用两次:

var matrix:Matrix = new Matrix(); 
var rotation:Number = 2 * Math.PI * (30 / 360); // 30° 
var scaleFactor:Number = 2; 
matrix.scale(scaleFactor, scaleFactor); 
matrix.rotate(rotation); 
matrix.scale(scaleX, scaleY); 
matrix.rotate(rotation); 
 
myDisplayObject.transform.matrix = matrix;

要将倾斜转换应用到 Matrix 对象,请调整该对象的 bc 属性。调整 b 属性将矩阵垂直倾斜,并调整 c 属性将矩阵水平倾斜。以下代码使用系数 2 垂直倾斜 myMatrix Matrix 对象:

var skewMatrix:Matrix = new Matrix(); 
skewMatrix.b = Math.tan(2); 
myMatrix.concat(skewMatrix);

可以将矩阵转换应用到显示对象的 transform 属性。例如,以下代码将矩阵转换应用于名为 myDisplayObject 的显示对象:

var matrix:Matrix = myDisplayObject.transform.matrix; 
var scaleFactor:Number = 2; 
var rotation:Number = 2 * Math.PI * (60 / 360); // 60° 
matrix.scale(scaleFactor, scaleFactor); 
matrix.rotate(rotation); 
 
myDisplayObject.transform.matrix = matrix;

第一行将 Matrix 对象设置为 myDisplayObject 显示对象所使用的现有转换矩阵(myDisplayObject 显示对象的 transformation 属性的 matrix 属性)。这样,调用的 Matrix 类方法对显示对象的现有位置、缩放和旋转会产生累积效果。

注: ColorTransform 类还包含在 flash.geometry 包中。该类用于设置 Transform 对象的 colorTransform 属性。因为它不应用任何几何转换,所以在此处不做详细讨论。有关详细信息,请参阅用于 Adobe Flash Platform 的 ActionScript 3.0 参考中的 ColorTransform 类。