Matrix-objecten gebruiken

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

De Matrix-klasse representeert een transformatiematrix waarmee wordt bepaald hoe punten worden toegewezen van een coördinaatruimte naar een andere. U kunt verschillende grafische transformaties op een weergaveobject uitvoeren door de eigenschappen van een object Matrix in te stellen, dat object Matrix toe te passen op de eigenschap matrix van een object Transform en vervolgens dat object Transform toe te passen als de eigenschap transform van het weergaveobject. Deze transformatiefuncties omvatten transleren (positie van x en y wijzigen), roteren, schalen en scheeftrekken.

Hoewel u een matrix kunt definiëren door de eigenschappen (a, b, c, d, tx, ty) van een object Matrix rechtstreeks aan te passen, is het gebruik van de methode createBox() eenvoudiger. Deze methode maakt gebruik van parameters waarmee u de effecten voor schalen, roteren en transleren voor de resulterende matrix rechtstreeks definieert. Met de volgende code wordt bijvoorbeeld een Matrix-object gemaakt waarmee het object horizontaal met 2,0 wordt geschaald, verticaal met 3,0 wordt geschaald, met 45 graden wordt geroteerd, en met 10 pixels naar rechts en 20 pixels naar beneden wordt verplaatst (getransleerd):

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

U kunt de effecten voor schalen, roteren en transleren van een object Matrix ook aanpassen met de methoden scale(), rotate() en translate(). Deze methoden worden met de waarden van het bestaande Matrix-object gecombineerd. Met de volgende code wordt bijvoorbeeld een Matrix-object ingesteld waarmee een object met een factor 4 wordt geschaald en 60 graden wordt geroteerd, aangezien de methoden scale() en rotate() tweemaal worden aangeroepen:

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;

Als u een object Matrix wilt scheeftrekken, past u de eigenschap b of c ervan aan. Bij aanpassing van de eigenschap b wordt de matrix verticaal scheefgetrokken en bij aanpassing van de eigenschap c horizontaal. Met de volgende code wordt het Matrix-object myMatrix met een factor 2 verticaal scheefgetrokken:

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

U kunt een matrixtransformatie toepassen op de eigenschap transform van een weergaveobject. Met de volgende code wordt bijvoorbeeld een matrixtransformatie toegepast op een weergaveobject met de naam 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;

Met de eerste regel wordt een object Matrix ingesteld op de bestaande transformatiematrix die door het weergaveobject myDisplayObject wordt gebruikt (de eigenschap matrix van de eigenschap transformation van het weergaveobject myDisplayObject). Op deze wijze hebben methoden van de klasse Matrix die u aanroept, een cumulatief effect op de huidige positie, schaal en rotatie van het weergaveobject.

Opmerking: De klasse ColorTransform is ook onderdeel van het pakket flash.geometry. Met deze klasse stelt u de eigenschap colorTransform in van een object Transform. Omdat hierbij geen sprake is van een geometrische transformatie, wordt deze klasse niet in dit hoofdstuk besproken. Zie de ColorTransform-klassse in de Naslaggids voor ActionScript 3.0 voor het Adobe Flash-platform voor meer informatie.