Uso degli oggetti Matrix

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

La classe Matrix rappresenta una matrice di trasformazione che determina come mappare i punti da uno spazio di coordinate a un altro. È possibile eseguire diverse trasformazioni grafiche su un oggetto di visualizzazione impostando le proprietà di un oggetto Matrix, applicando l'oggetto Matrix alla proprietà matrix di un oggetto Transform e applicando quindi l'oggetto Transform come proprietà transform dell'oggetto di visualizzazione. Queste funzioni di trasformazione includono conversione (riposizionamento di x e y), rotazione, modifica in scala e inclinazione.

Nonostante sia possibile definire una matrice modificando direttamente le proprietà (a, b, c, d, tx, ty) di un oggetto Matrix, è più semplice usare il metodo createBox(). Questo metodo comprende parametri che consentono di definire direttamente gli effetti di modifica in scala, rotazione e conversione della matrice risultante. Ad esempio, il codice seguente crea un oggetto Matrix che modifica in scala un oggetto orizzontalmente di 2.0, lo modifica in scala verticalmente di 3.0, lo ruota di 45°, lo sposta (traslandolo) di 10 pixel a destra e lo sposta di 20 pixel verso il basso:

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

Potete anche modificare gli effetti di modifica in scala, rotazione e conversione di un oggetto Matrix usando i metodi scale(), rotate() e translate(). Notate che i valori impostati per questi metodi si combinano con i valori già presenti nell'oggetto Matrix. Ad esempio, il codice seguente imposta un oggetto Matrix che modifica in scala un oggetto di 4 volte e lo ruota di 60°, poiché i metodi scale() e rotate() sono chiamati due volte:

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;

Per applicare un'inclinazione a un oggetto Matrix, modificatene le proprietà b o c. Modificando la proprietà b si imprime un'inclinazione verticale alla matrice; modificando la proprietà c si imprime un'inclinazione orizzontale. Il codice seguente inclina l'oggetto Matrix myMatrix in senso verticale di un fattore pari a 2:

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

È possibile applicare una trasformazione di matrice alla proprietà transform di un oggetto di visualizzazione. Ad esempio, il codice seguente applica una trasformazione di matrice a un oggetto di visualizzazione denominato 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;

La prima riga imposta un oggetto Matrix sulla matrice di trasformazione esistente usata dall'oggetto di visualizzazione myDisplayObject (la proprietà matrix della proprietà transformation dell'oggetto di visualizzazione myDisplayObject). In questo modo, i metodi chiamati per la classe Matrix hanno un effetto cumulativo sulla posizione, la scala e la rotazione dell'oggetto di visualizzazione.

Nota: anche la classe ColorTransform fa parte del pacchetto flash.geometry e viene usata per impostare la proprietà colorTransform di un oggetto Transform. Poiché non applica alcun tipo di trasformazione geometrica all'oggetto, non verrà presa in esame. Per ulteriori informazioni, vedete la classe ColorTransform nella Guida di riferimento di Adobe ActionScript 3.0 per la piattaforma Adobe Flash.