http://blog.youkuaiyun.com/as3_flash/article/details/2378549
在AS3中,對一個顯示對像進行變形操作,需要使用Matrix類。Matrix類的變形操作是基於一個三行三列的方型矩陣。當在代碼中創建一個Matrix類時,AS3的內部機制就創建了一個這樣的變換矩陣作為代碼操作的數理基礎。
使用以下代碼可以在AS3中創建一個矩陣,並輸出矩陣的值:
var myMatrix:Matrix=new Matrix;
trace(myMatrix.toString())
其輸出結果為:
(a=1, b=0, c=0, d=1, tx=0, ty=0)
從這個結果上看,AS3中的矩陣似乎是兩行三列的矩陣,其實不然。充分的設置矩陣內的值,理論上可以進行三維的操作。但Flash不支持三維,其中的u、v和w被自動忽略,運算時總是令u=0,v=0,以及w=1。在使用toString()方法時,對於永遠保持不變的u、v、w就不再輸出了。所以真實的Matrix類的變換矩陣應該形如圖所示:
矩陣操作描述的是如何將坐標系內的點映射到另一個位置。代碼可以讀取和寫入此矩陣內的數值,來改變和控制形變。在影片運行時,矩陣內相應的值會同顯示對象的信息相乘相加,運算出變形後的對象信息,並繪製在舞台上。
AS3中矩陣類變形的具體的數學公式同前文所述的仿射變形公式相同,並不複雜。假設一個點A,其坐標值為(x,y),則等價於三維坐標系中的(x,y,z),其中z為任意值,表示該二維坐標平面是三維空間中垂直於z軸的一個平面。該平面內所有點在z坐標上都具有相同的值。
假設變形運算後的位置為(m,n),則根據矩陣乘法和仿射變形公式,其運算結果為:
m=x*a+y*c+z*u+tx
n= x*b+y*d+z*v+ty
在AS3中,u和v永遠是0,所以簡化的運算結果為:
m=x*a+y*c+tx
n= x*b+y*d+ty
對於一個Matrix對象,其內部屬性a、b、c、d、tx和ty,就對應了圖8-35中矩陣內的值。AS3中DisplayObject類及其子類,內部都包含transform屬性,這個屬性是一組對象的集合,其中就有一個矩陣類。將這個類拷貝,並對副本做操作,能得到一個目標矩陣。將目標矩陣替換原有矩陣。Flash會自動套用目標矩陣的信息,改變顯示對象。這種改變包括位移,縮放,旋轉,斜切,映射等。
變形可以累計。無論對一個矩陣進行多少次變形,它保留的都是個變形依次積累的數值信息。當對顯示對像應用這個矩陣的時候,等於所有的變換都被依次應用了。代碼中不能使用為矩陣類賦null值的辦法使其回復原始狀態。