Exempel på geometri: tillämpa en matrisomformning på ett visningsobjekt

Flash Player 9 och senare, Adobe AIR 1.0 och senare

I programmet DisplayObjectTransformer visas olika sätt att använda klassen Matrix för att omforma ett visningsobjekt, inklusive följande:

  • Rotering av visningsobjekt

  • Skalning av visningsobjekt

  • Översättning (flyttning) av visningsobjekt

  • Skevning av visningsobjekt

I programmet finns ett gränssnitt för att justera parametrarna för matrisinformationen enligt följande:

När användaren klickar på knappen Transform kommer aktuella omformningsinställningar att tillämpas.

Det ursprungliga visningsobjektet och visningsobjektet som har roterats -45° och skalförändrats 50 %

Programfilerna för det här exemplet finns på www.adobe.com/go/learn_programmingAS3samples_flash_se. Du hittar programfiler för DisplayObjectTransformer i mappen Samples/DisplayObjectTransformer. Programmet består av följande filer:

Fil

Beskrivning

DisplayObjectTransformer.mxml

eller

DisplayObjectTransformer.fla

Huvudprogramfilen i Flash (FLA) eller Flex (MXML)

com/example/programmingas3/geometry/MatrixTransformer.as

En klass som innehåller metoder för att tillämpa matrisomformningar.

img/

En katalog med bildfiler som används i programmet.

Definiera klassen MatrixTransformer

Klassen MatrixTransformer innehåller statiska metoder för att tillämpa geometriska omformningar på matrisobjekt.

Metoden transform()

Metoden transform() innehåller följande parametrar:

  • sourceMatrix – Indatamatrisen som metoden omformar

  • xScale och yScale – Skalfaktorn x och y

  • dx och dy – Översättningsmängden x och y, i pixlar

  • rotation – Rotationen i grader

  • skew – Skevningsfaktorn i procent

  • skewType – Riktningen på skevningen, antingen "right" eller "left"

Det returnerade värdet är den resulterande matrisen.

Med metoden transform() anropas följande statiska metoder för klassen:

  • skew()

  • scale()

  • translate()

  • rotate()

Alla returnerar källmatrisen med den tillämpade omformningen.

Metoden skew()

Metoden skew() skevar matrisen genom att ändra dess egenskaper b och c. En valfri parameter, unit, används för att bestämma vilken enhet som ska användas för att definiera skevningsvinkeln. Om nödvändigt konverteras angle-värdet för metoden till radianer:

if (unit == "degrees")  
{ 
    angle = Math.PI * 2 * angle / 360; 
} 
if (unit == "gradients") 
{ 
    angle = Math.PI * 2 * angle / 100; 
}

Ett skewMatrix-matrisobjekt skapas och ändras för att tillämpa skevningsomformningen. Till att börja med har identitetsmatrisen följande utseende:

var skewMatrix:Matrix = new Matrix();

Parametrarna skewSide avgör vilken sida som skevningen ska tillämpas på. Om det är "right" används följande kod för att ställa in matrisegenskapen b:

skewMatrix.b = Math.tan(angle);

I annat fall är det undersidan som skevas genom att matrisegenskapen c ändras enligt följande:

skewMatrix.c = Math.tan(angle);

Den resulterande skevningen tillämpas sedan på den befintliga matrisen genom att två matriser slås samman enligt följande:

sourceMatrix.concat(skewMatrix); 
return sourceMatrix;

Metoden scale()

Följande exempel visar hur metoden scale() först justerar skalfaktorn om den anges i procent och sedan använder metoden scale() för matrisobjektet:

if (percent) 
{ 
    xScale = xScale / 100; 
    yScale = yScale / 100; 
} 
sourceMatrix.scale(xScale, yScale); 
return sourceMatrix;

Metoden translate()

Metoden translate() tillämpar översättningsfaktorerna dx och dy genom att anropa metoden translate() för matrisobjektet enligt följande:

sourceMatrix.translate(dx, dy); 
return sourceMatrix;

Metoden rotate()

Metoden rotate() används för att konvertera indatarotationsfaktorn till radianer (om den anges i grader eller övertoningar) och därefter anropas metoden rotate() för matrisobjektet:

if (unit == "degrees") 
{ 
    angle = Math.PI * 2 * angle / 360; 
} 
if (unit == "gradients") 
{ 
    angle = Math.PI * 2 * angle / 100; 
} 
sourceMatrix.rotate(angle); 
return sourceMatrix;

Anropa metoden MatrixTransformer.transform() från programmet

Programmet innehåller ett användargränssnitt för att hämta omformningsparametrar från användaren. Därefter skickas dessa värden tillsammans med egenskapen matrix för egenskapen transform för visningsobjektet till metoden Matrix.transform() enligt följande:

tempMatrix = MatrixTransformer.transform(tempMatrix,  
    xScaleSlider.value,  
    yScaleSlider.value, 
    dxSlider.value,  
    dySlider.value, 
    rotationSlider.value, 
    skewSlider.value,  
    skewSide );

Programmet tillämpar sedan det returnerade värdet på egenskapen matrix för egenskapen transform i visningsobjektet vilket därmed aktiverar omformningen:

img.content.transform.matrix = tempMatrix;