Korzystanie z obiektów Matrix

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Klasa Matrix reprezentuje macierz transformacji, która określa sposób odwzorowania punktów z jednej przestrzeni współrzędnych na drugą przestrzeń. Istnieje możliwość wykonywania różnych transformacji graficznych na obiekcie wyświetlanym. Należy w tym celu ustawić właściwości obiektu Matrix, zastosować ten obiekt Matrix do właściwości matrix obiektu Transform, a następnie zastosować ten obiekt Transform jako właściwość transform obiektu wyświetlanego. Do funkcji transformacji należy translacja (zmiana współrzędnych x i y ), obrót, skalowanie i pochylenie.

Mimo że możliwe jest zdefiniowanie macierzy poprzez bezpośrednie określenie wartości właściwości ( a , b , c , d , tx , ty ) obiektu Matrix, łatwiej jest skorzystać z metody createBox() . Parametry tej metody pozwalają na bezpośrednie zdefiniowanie efektów skalowania, obrotu i translacji, jakie ma wprowadzać wynikowa macierz. Na przykład: poniższy kod tworzy obiekt Matrix wprowadzający efekt przeskalowania obiektu w poziomie o wartość 2,0, przeskalowania go w pionie o wartość 3,0, obrócenia go o 45°, przesunięcia go (translacji) o 10 pikseli w prawo i przesunięcia go o 20 pikseli w dół:

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);

Możliwe jest także dopasowanie efektów skalowania, obrotu i translacji wprowadzanych przez obiekt Matrix przy użyciu metod scale() , rotate() i translate() . Należy zwrócić uwagę, że te metody powodują modyfikację dotychczasowych wartości obiektu Matrix. Przykład: poniższy kod konfiguruje obiekt Matrix, który skaluje obiekt 4-krotnie i obraca go o 60°, ponieważ metody scale() i rotate() są wywoływane dwa razy:

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;

Aby zastosować do obiektu Matrix transformację pochylającą, należy zmodyfikować jego właściwość b lub c . Zmiana wartości właściwości b powoduje pochylenie macierzy w pionie, a zmiana wartości właściwości c powoduje pochylenie macierzy w poziomie. Poniższy kod pochyla obiekt Matrix o nazwie myMatrix w pionie o współczynnik 2:

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

Transformację opisaną przez obiekt Matrix można zastosować do właściwości transform obiektu wyświetlanego. Poniższy przykładowy kod ilustruje zastosowanie transformacji macierzowej do obiektu wyświetlanego o nazwie 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;

Pierwszy wiersz przypisuje obiekt Matrix do istniejącej macierzy transformacji obiektu wyświetlanego myDisplayObject (właściwości matrix właściwości transformation obiektu wyświetlanego myDisplayObject ). Dzięki temu wywołane metody klasy Matrix będą razem wpływać na dotychczasowe położenie, skalę i kąt obrotu obiektu wyświetlanego.

Uwaga: W skład pakietu flash.geometry wchodzi także klasa ColorTransform. Ta klasa służy do nadawania wartości właściwości colorTransform obiektu Transform. Nie została omówiona szczegółowo w tym rozdziale, ponieważ nie powoduje zastosowania żadnej transformacji geometrycznej. Więcej informacji zawiera opis klasy ColorTransform w Skorowidzu języka ActionScript 3.0 dla Platformy Adobe Flash .