| 套件 | flash.geom |
| 類別 | public class Matrix |
| 繼承 | Matrix Object |
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
matrix 屬性,然後將該 Transform 物件套用成顯示物件的 transform 屬性,藉以在顯示物件上執行各種圖像轉換。 這些轉換函數包括轉譯 (x及 y 重新定位)、旋轉、縮放及傾斜。
這些轉換類型統稱為 「仿射轉換」。 仿射轉換會在轉換時保留線段的筆直性,以便讓平行線保持平行。
若要將變形矩陣套用至顯示物件,您可以建立 Transform 物件、將其 matrix 屬性設定為變形矩陣,然後將顯示物件的 transform 屬性設定為該 Transform 物件。 Matrix 物件也可以當做某些方法的參數使用,例如下列方法:
draw() 方法beginBitmapFill()、beginGradientFill() 或 lineGradientStyle() 方法變形矩陣物件是具有下列內容的 3 x 3 矩陣:

在傳統的變形矩陣中,u、v 和 w 屬性提供了額外的功能。 Matrix 類別只能在二維空間中作業,因此會永遠假設 u 和 v 屬性值為 0.0,而 w 屬性值為 1.0。 此矩陣的有效值如下所示:

您可以取得及設定 Matrix 物件中其它全部的六個屬性值。a、b、c、d、tx 和 ty。
Matrix 類別支援四種主要的轉換類型: 轉譯、縮放、旋轉及傾斜。 您可以使用專屬方法來設定其中三種轉換,如下表所示:
| 轉換 | 方法 | 矩陣值 | 顯示結果 | 說明 |
|---|---|---|---|---|
| 轉譯 (平移) | translate(tx, ty) | ![]() | ![]() | 會將影像向右移動 tx 像素,再向下移動 ty 像素。 |
| 縮放 | scale(sx, sy) | ![]() | ![]() | 會調整影像大小,並且在 x 軸上將每一個像素的位置乘以 sx,以及在 y 軸上乘以 sy。 |
| 旋轉 | rotate(q) | ![]() | ![]() | 會將影像旋轉 q 角度,以弧度為單位。 |
| 傾斜或剪影 | 無;必須設定 b 及 c 屬性。 | ![]() | ![]() | 會將影像以漸進方式平行挪移至 x 或 y 軸。 Matrix 物件的 b 屬性代表傾斜角度與 y 軸的正切函數值;Matrix 物件的 c 屬性則代表傾斜角度與 x 軸的正切函數值。 |
每個轉換函數都能變更目前矩陣的屬性,因此您可以有效地運用來組合多種轉換。 若要這樣做,您可以先呼叫一個以上的轉換函數,然後再使用該顯示物件的 transform 屬性,將矩陣套用至其顯示物件。
請先使用 new Matrix() 建構函式建立 Matrix 物件,然後才能呼叫 Matrix 物件的方法。
請參閱
| 屬性 | 定義自 | ||
|---|---|---|---|
| a : Number
在 Matrix 物件的第一列和第一行中的值,會在縮放或旋轉影像時,沿著 x 軸影響像素的位置。
| Matrix | ||
| b : Number
在 Matrix 物件的第一列和第一行中的值,會在旋轉或傾斜影像時,沿著 y 軸影響像素的位置。
| Matrix | ||
| c : Number
在 Matrix 物件的第二列和第一行中的值,會在旋轉或傾斜影像時,沿著 x 軸影響像素的位置。
| Matrix | ||
![]() | constructor : Object
類別物件的參照或是特定物件實體的建構函數。
| Object | |
| d : Number
在 Matrix 物件的第二列和第二行中的值,會在縮放或旋轉影像時,沿著 y 軸影響像素的位置。
| Matrix | ||
![]() | prototype : Object
[static]
類別或函數物件之原型物件的參照。
| Object | |
| tx : Number
要做為根據並沿著 x 軸轉譯每一個點的距離。
| Matrix | ||
| ty : Number
要做為根據並沿著 y 軸轉譯每一個點的距離。
| Matrix | ||
| 方法 | 定義自 | ||
|---|---|---|---|
|
以指定參數建立新 Matrix 物件。
| Matrix | ||
|
傳回新 Matrix 物件 (此矩陣的翻版),其具有和所包含物件完全相同的副本。
| Matrix | ||
|
將某個矩陣與目前的矩陣連接,有效地結合兩個矩陣的幾何效果。
| Matrix | ||
|
包含用來縮放、旋轉和轉譯的參數。
| Matrix | ||
|
createGradientBox(width:Number, height:Number, rotation:Number = 0, tx:Number = 0, ty:Number = 0):void
建立 Graphics 類別之 beginGradientFill() 和 lineGradientStyle() 方法預期的特定矩陣樣式。
| Matrix | ||
|
在轉換前的座標空間中指定一個點,並於轉換完成後傳回該點的座標。
| Matrix | ||
![]() |
指出物件是否有已定義的指定屬性。
| Object | |
|
會將每個矩陣的屬性設定為導致 null 轉換的值。
| Matrix | ||
|
執行原始矩陣的反向轉換。
| Matrix | ||
![]() |
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。
| Object | |
![]() |
指出指定的屬性是否存在,以及是否可列舉。
| Object | |
|
會將旋轉轉換套用至 Matrix 物件。
| Matrix | ||
|
會將縮放轉換套用至矩陣。
| Matrix | ||
![]() |
為迴圈作業設定動態屬性的可用性。
| Object | |
|
傳回文字值,列出 Matrix 物件的屬性。
| Matrix | ||
|
會傳回將 Matrix 物件所代表之幾何轉換套用至指定點的結果。
| Matrix | ||
|
根據 dx 和 dy 參數的指定值,沿著 x 和 y 軸轉譯矩陣。
| Matrix | ||
![]() |
會傳回指定之物件的基本值。
| Object | |
| a | 屬性 |
public var a:Number
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
在 Matrix 物件的第一列和第一行中的值,會在縮放或旋轉影像時,沿著 x 軸影響像素的位置。
myMatrix,並設定其 a 值。
import flash.geom.Matrix;
var myMatrix:Matrix = new Matrix();
trace(myMatrix.a); // 1
myMatrix.a = 2;
trace(myMatrix.a); // 2
| b | 屬性 |
public var b:Number
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
在 Matrix 物件的第一列和第一行中的值,會在旋轉或傾斜影像時,沿著 y 軸影響像素的位置。
myMatrix,並設定其 b 值。
import flash.geom.Matrix;
var myMatrix:Matrix = new Matrix();
trace(myMatrix.b); // 0
var degrees:Number = 30;
var radians:Number = (degrees/180) * Math.PI;
myMatrix.b = Math.tan(radians);
trace(myMatrix.b); // 0.5773502691896257
| c | 屬性 |
public var c:Number
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
在 Matrix 物件的第二列和第二行中的值,會在旋轉或傾斜影像時,沿著 x 軸影響像素的位置。
myMatrix,並設定其 c 值。
import flash.geom.Matrix;
var myMatrix:Matrix = new Matrix();
trace(myMatrix.c); // 0
var degrees:Number = 30;
var radians:Number = (degrees/180) * Math.PI;
myMatrix.c = Math.tan(radians);
trace(myMatrix.c); // 0.5773502691896257
| d | 屬性 |
public var d:Number
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
在 Matrix 物件的第一列和第一行中的值,會在縮放或旋轉影像時,沿著 y 軸影響像素的位置。
myMatrix,並設定其 d 值。
import flash.geom.Matrix;
var myMatrix:Matrix = new Matrix();
trace(myMatrix.d); // 1
myMatrix.d = 2;
trace(myMatrix.d); // 2
| tx | 屬性 |
public var tx:Number
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
此距離是轉譯每個 X 軸的點。 這代表在 Matrix 物件之第一列、第三行中的值。
myMatrix,並設定其 tx 值。
import flash.geom.Matrix;
var myMatrix:Matrix = new Matrix();
trace(myMatrix.tx); // 0
myMatrix.tx = 50; // 50
trace(myMatrix.tx);
| ty | 屬性 |
public var ty:Number
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
此距離是轉譯每個 y 軸的點。 這代表在 Matrix 物件之第二列、第三行中的值。
myMatrix,並設定其 ty 值。
import flash.geom.Matrix;
var myMatrix:Matrix = new Matrix();
trace(myMatrix.ty); // 0
myMatrix.ty = 50;
trace(myMatrix.ty); // 50
| Matrix | () | 建構函式 |
public function Matrix(a:Number = 1, b:Number = 0, c:Number = 0, d:Number = 1, tx:Number = 0, ty:Number = 0)
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
以指定參數建立新 Matrix 物件。 在矩陣標記法中,屬性組織的方式如下所示:

如果您沒有提供任何參數給 new Matrix() 建構函式,它就會使用下列值來建立 「單位矩陣」:
a = 1 | b = 0 |
c = 0 | d = 1 |
tx = 0 | ty = 0 |
在矩陣標記法中,單位矩陣看起來如下:

a:Number (default = 1) — 新的 Matrix 物件之第一列、第一行中的值。
|
|
b:Number (default = 0) — 新的 Matrix 物件之第一列、第二行中的值。
|
|
c:Number (default = 0) — 新的 Matrix 物件之第二列、第一行中的值。
|
|
d:Number (default = 1) — 新的 Matrix 物件之第二列、第二行中的值。
|
|
tx:Number (default = 0) — 新的 Matrix 物件之第一列、第三行中的值。
|
|
ty:Number (default = 0) — 新的 Matrix 物件之第二列、第三行中的值。
|
Matrix() 建構函式的方式建立 matrix_1,另外則將參數傳送給這個建構函式來建立 matrix_2。 請注意,matrix_1 (建立時沒有使用任何參數) 會產生單位矩陣,並且具有 a=1、b=0、c=0、d=1、tx=0、ty=0 的值。
import flash.geom.Matrix;
var matrix_1:Matrix = new Matrix();
trace(matrix_1); // (a=1, b=0, c=0, d=1, tx=0, ty=0)
var matrix_2:Matrix = new Matrix(1, 2, 3, 4, 5, 6);
trace(matrix_2); // (a=1, b=2, c=3, d=4, tx=5, ty=6)
| clone | () | 方法 |
public function clone():Matrix
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
傳回新 Matrix 物件 (此矩陣的翻版),其具有和所包含物件完全相同的副本。
傳回值Matrix — Matrix 物件。
|
| concat | () | 方法 |
public function concat(m:Matrix):void
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
將某個矩陣與目前的矩陣連接,有效地結合兩個矩陣的幾何效果。 以數學觀點來說,連接兩個矩陣與使用矩陣乘法來結合兩個矩陣是一樣的意思。
例如,如果矩陣 m1 將物件放大四倍,而矩陣 m2 以 1.5707963267949 的弧度 (Math.PI/2) 旋轉物件,m1.concat(m2) 便會將 m1 轉換成可將物件放大四倍同時將物件旋轉 Math.PI/2 弧度的矩陣。
此方法會以連接矩陣取代原始矩陣。 如果您要連接兩個矩陣,而不更改任一原始矩陣,請先使用 clone() 方法來複製原始矩陣,如「類別範例」一節所示。
參數
m:Matrix — 要連接到原始矩陣的矩陣。
|
| createBox | () | 方法 |
public function createBox(scaleX:Number, scaleY:Number, rotation:Number = 0, tx:Number = 0, ty:Number = 0):void
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
包含用來縮放、旋轉和轉譯的參數。 當套用至矩陣時,會根據這些參數設定矩陣的值。
使用 createBox() 方法讓您取得的矩陣,會與連續套用 identity()、rotate()、scale() 和 translate() 方法後所獲得的矩陣相同。 例如,mat1.createBox(2,2,Math.PI/4, 100, 100) 的效果與下列程式碼相同:
import flash.geom.Matrix;
var mat1:Matrix = new Matrix();
mat1.identity();
mat1.rotate(Math.PI/4);
mat1.scale(2,2);
mat1.translate(10,20);
參數
scaleX:Number — 水平縮放的係數。
|
|
scaleY:Number — 垂直縮放的係數。
|
|
rotation:Number (default = 0) — 旋轉量,以弧度為單位。
|
|
tx:Number (default = 0) — 沿著 x 軸向右轉譯 (移動) 的像素數。
|
|
ty:Number (default = 0) — 沿著 y 軸向下轉譯 (移動) 的像素數。
|
請參閱
myMatrix 的 createBox() 方法,設定它的 x 縮放、y 縮放、旋轉、x 位置和 y 位置。
package
{
import flash.display.Shape;
import flash.display.Sprite;
import flash.geom.Matrix;
import flash.geom.Transform;
public class Matrix_createBox extends Sprite
{
public function Matrix_createBox()
{
var myMatrix:Matrix = new Matrix();
trace(myMatrix.toString()); // (a=1, b=0, c=0, d=1, tx=0, ty=0)
myMatrix.createBox(1, 2, Math.PI/4, 50, 100);
trace(myMatrix.toString());
// (a=0.7071067811865476, b=1.414213562373095, c=-0.7071067811865475,
// d=1.4142135623730951, tx=100, ty=200)
var rectangleShape:Shape = createRectangle(20, 80, 0xFF0000);
addChild(rectangleShape);
var rectangleTrans:Transform = new Transform(rectangleShape);
rectangleTrans.matrix = myMatrix;
}
public function createRectangle(w:Number, h:Number, color:Number):Shape
{
var rect:Shape = new Shape();
rect.graphics.beginFill(color);
rect.graphics.drawRect(0, 0, w, h);
addChild(rect);
return rect;
}
}
}| createGradientBox | () | 方法 |
public function createGradientBox(width:Number, height:Number, rotation:Number = 0, tx:Number = 0, ty:Number = 0):void
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
會建立 Graphics 類別之 beginGradientFill() 和 lineGradientStyle() 方法預期的特定矩陣樣式。 寬度及高度會相應於 scaleX/scaleY 這一對值來進行縮放,並以一半的寬度及高度偏移 tx/ty 值。
例如,假設漸層具有下列特性:
GradientType.LINEAR[0, 255]SpreadMethod.PADInterpolationMethod.LINEAR_RGB下列圖例將說明使用 createGradientBox() 方法搭配不同參數設定來定義矩陣的漸層:
createGradientBox() 設定 | 產生的漸層 |
|---|---|
width = 25; height = 25; rotation = 0; tx = 0; ty = 0; | ![]() |
width = 25; height = 25; rotation = 0; tx = 25; ty = 0; | ![]() |
width = 50; height = 50; rotation = 0; tx = 0; ty = 0; | ![]() |
width = 50; height = 50; rotation = Math.PI / 4; // 45° tx = 0; ty = 0; | ![]() |
參數
width:Number — 漸層方塊的寬度。
|
|
height:Number — 漸層方塊的高度。
|
|
rotation:Number (default = 0) — 旋轉量,以弧度為單位。
|
|
tx:Number (default = 0) — 沿著 x 軸向右轉譯的距離,以為像素單位。 這個值是根據 width 參數的一半進行偏移。
|
|
ty:Number (default = 0) — 沿著 y 軸向下轉譯的距離,以為像素單位。 這個值是根據 height 參數的一半進行偏移。
|
請參閱
myMatrix 的 createBox() 方法,設定它的 x 縮放、y 縮放、旋轉、x 位置和 y 位置。
package
{
import flash.display.GradientType;
import flash.display.Sprite;
import flash.geom.Matrix;
public class Matrix_createGradientBox extends Sprite
{
public function Matrix_createGradientBox()
{
var myMatrix:Matrix = new Matrix();
trace(myMatrix.toString()); // (a=1, b=0, c=0, d=1, tx=0, ty=0)
myMatrix.createGradientBox(200, 200, 0, 50, 50);
trace(myMatrix.toString()); // (a=0.1220703125, b=0, c=0, d=0.1220703125, tx=150, ty=150)
var colors:Array = [0xFF0000, 0x0000FF];
var alphas:Array = [100, 100];
var ratios:Array = [0, 0xFF];
this.graphics.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, myMatrix);
this.graphics.drawRect(0, 0, 300, 200);
}
}
}| deltaTransformPoint | () | 方法 |
public function deltaTransformPoint(point:Point):Point
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
在轉換前的座標空間中指定一個點,並於轉換完成後傳回該點的座標。 與使用 transformPoint() 方法套用的標準轉換不同,deltaTransformPoint() 方法的轉換不會考慮轉譯參數 tx 和 ty。
參數
point:Point — 您想要取得矩陣轉換結果的點。
|
Point — 套用矩陣轉換所產生的點。
|
| identity | () | 方法 |
public function identity():void
| Player 版本 : | Flash Player 9 |
會將每個矩陣的屬性設定為導致 null 轉換的值。 透過套用單位矩陣所轉換的物件將與原始矩陣完全相同。
呼叫 identity() 方法之後,產生的矩陣便具有下列屬性: a =1, b =0, c =0, d =1, tx =0, ty =0.
在矩陣標記法中,單位矩陣看起來如下:

| invert | () | 方法 |
public function invert():void
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
執行原始矩陣的反向轉換。 您可以將反矩陣套用至物件,以還原套用原始矩陣所產生的轉換。
doubleScaleMatrix 的 invert() 方法來建立 halfScaleMatrix。 然後證明這兩個矩陣互為對方的反矩陣 -- 也就是,可以還原另一個矩陣所產生的任何轉換 -- 方式是建立相等於 noScaleMatrix 的 originalAndInverseMatrix。
package
{
import flash.display.Shape;
import flash.display.Sprite;
import flash.geom.Matrix;
import flash.geom.Transform;
public class Matrix_invert extends Sprite
{
public function Matrix_invert()
{
var rect0:Shape = createRectangle(20, 80, 0xFF0000);
var rect1:Shape = createRectangle(20, 80, 0x00FF00);
var rect2:Shape = createRectangle(20, 80, 0x0000FF);
var rect3:Shape = createRectangle(20, 80, 0x000000);
var trans0:Transform = new Transform(rect0);
var trans1:Transform = new Transform(rect1);
var trans2:Transform = new Transform(rect2);
var trans3:Transform = new Transform(rect3);
var doubleScaleMatrix:Matrix = new Matrix(2, 0, 0, 2, 0, 0);
trans0.matrix = doubleScaleMatrix;
trace(doubleScaleMatrix.toString()); // (a=2, b=0, c=0, d=2, tx=0, ty=0)
var noScaleMatrix:Matrix = new Matrix(1, 0, 0, 1, 0, 0);
trans1.matrix = noScaleMatrix;
rect1.x = 50;
trace(noScaleMatrix.toString()); // (a=1, b=0, c=0, d=1, tx=0, ty=0)
var halfScaleMatrix:Matrix = doubleScaleMatrix.clone();
halfScaleMatrix.invert();
trans2.matrix = halfScaleMatrix;
rect2.x = 100;
trace(halfScaleMatrix.toString()); // (a=0.5, b=0, c=0, d=0.5, tx=0, ty=0)
var originalAndInverseMatrix:Matrix = doubleScaleMatrix.clone();
originalAndInverseMatrix.concat(halfScaleMatrix);
trans3.matrix = originalAndInverseMatrix;
rect3.x = 150;
trace(originalAndInverseMatrix.toString()); // (a=1, b=0, c=0, d=1, tx=0, ty=0)
}
public function createRectangle(w:Number, h:Number, color:Number):Shape
{
var rect:Shape = new Shape();
rect.graphics.beginFill(color);
rect.graphics.drawRect(0, 0, w, h);
addChild(rect);
return rect;
}
}
}| rotate | () | 方法 |
public function rotate(angle:Number):void
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
會將旋轉轉換套用至 Matrix 物件。
rotate() 方法會更改 Matrix 物件的 a、b、c 和 d 屬性。 在矩陣標記法中,這和連接目前矩陣與下列矩陣的效果相同:

參數
angle:Number — 旋轉角度,以弧度為單位。
|
請參閱
| scale | () | 方法 |
public function scale(sx:Number, sy:Number):void
| Player 版本 : | Flash Player 9 |
會將縮放轉換套用至矩陣。 x 軸會乘以 sx,而 y 軸會乘以 sy。
scale() 方法會更改 Matrix 物件的 a 和 d 屬性。 在矩陣標記法中,這和連接目前矩陣與下列矩陣的效果相同:

參數
sx:Number — 用於沿著 x 軸縮放物件的倍數。
|
|
sy:Number — 用於沿著 y 軸縮放物件的倍數。
|
請參閱
| toString | () | 方法 |
public function toString():String
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
傳回文字值,列出 Matrix 物件的屬性。
傳回值String — 字串,其中包含 Matrix 物件的屬性值:a、b、c、d、tx 和 ty。
|
| transformPoint | () | 方法 |
public function transformPoint(point:Point):Point
| Player 版本 : | Flash Player 9 |
會傳回將 Matrix 物件所代表之幾何轉換套用至指定點的結果。
參數
point:Point — 您想要取得矩陣轉換結果的點。
|
Point — 套用矩陣轉換所產生的點。
|
| translate | () | 方法 |
public function translate(dx:Number, dy:Number):void
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
會根據 dx 和 dy 參數的指定值,沿著 x 和 y 軸轉譯矩陣。
參數
dx:Number — 沿著 x 軸向右移的距離,以像素為單位。
|
|
dy:Number — 沿著 y 軸向下移的距離,以像素為單位。
|
請參閱
MatrixExample 類別,示範如何建立一個大型填滿漸層的正方形。 您可以使用下列步驟:
myMatrix,接著使用 trace() 方法來輸出 myMatrix 物件的預設屬性值。createGradientBox(),並將它的 width 和 height 參數設定為 200 個像素、沒有旋轉且沿著 x 和 y 軸轉譯的距離為 50 個像素。myMatrix 物件,以顯示呼叫 createGradientBox() 後的變更。colors:將漸層顏色的範圍設定為介於純紅色和純藍色之間。alphas:將不透明度設定為實心。ratios:將紅色和藍色的顏色分佈設定為相等。beginGradientFill() 對 myMatrix 物件進行操作,接著物件會呼叫 lineTo() 方法以產生填滿漸層的方塊。
package {
import flash.geom.Matrix;
import flash.display.Sprite;
import flash.display.GradientType;
public class MatrixExample extends Sprite {
public function MatrixExample() {
var myMatrix:Matrix = new Matrix();
trace(myMatrix.toString()); // (a=1, b=0, c=0, d=1, tx=0, ty=0)
myMatrix.createGradientBox(200, 200, 0, 50, 50);
trace(myMatrix.toString()); // (a=0.1220703125, b=0, c=0, d=0.1220703125, tx=150, ty=150)
var colors:Array = [0xFF0000, 0x0000FF];
var alphas:Array = [100, 100];
var ratios:Array = [0, 0xFF];
graphics.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, myMatrix);
graphics.lineTo(0, 300);
graphics.lineTo(300, 300);
graphics.lineTo(300, 0);
graphics.lineTo(0, 0);
}
}
}
目前頁面: http://livedocs.adobe.com/flash/9.0_tw/ActionScriptLangRefV3/flash/geom/Matrix.html