Exemple : Application d'une transformation de matrice à un objet d'affichage

L'exemple d'application DisplayObjectTransformer présente de nombreuses fonctions permettant d'utiliser la classe Matrix pour transformer un objet d'affichage, notamment :

L'application fournit une interface permettant d'ajuster les paramètres de la transformation de matrice, comme suit :


Capture d'écran illustrant l'interface utilisateur pour une application, avec des commandes organisées verticalement. Cinq curseurs (Scale X, Scale Y, Move X, Move Y et Rotate) sont suivis par un bouton radio (Skew Mode) et un curseur (Skew angle).

Lorsque l'utilisateur clique sur le bouton de transformation, l'application applique la transformation appropriée.


Deux images représentant la vue originale d'une banane et la même banane après une rotation de -45 degrés et un redimensionnement de 50 %.

L'objet d'affichage original et l'objet d'affichage pivoté de -45˚ et redimensionné de 50 %


Pour obtenir les fichiers d'application pour cet exemple, voir www.adobe.com/go/learn_programmingAS3samples_flash_fr. Les fichiers d'application DisplayObjectTransformer se trouvent dans le dossier Samples/DisplayObjectTransformer. Cette application se compose des fichiers suivants :

Fichier

Description

DisplayObjectTransformer.mxml

ou

DisplayObjectTransformer.fla

Le fichier d'application principal dans Flash (FLA) ou Flex (MXML)

com/example/programmingas3/geometry/MatrixTransformer.as

Une classe qui contient des méthodes permettant d'appliquer des transformations de matrice.

img/

Un répertoire contenant des exemples de fichiers image utilisés par l'application.

Sous-rubriques

Définition de la classe MatrixTransformer
Appel de la méthode MatrixTransformer.transform() depuis l'application

Définition de la classe MatrixTransformer

La classe MatrixTransformer comprend des méthodes statiques qui appliquent des transformations géométriques d'objets Matrix.

La méthode transform()

La méthode transform() comprend des paramètres pour chaque élément suivant :

La valeur renvoyée est la matrice résultante.

La méthode transform() appelle les méthodes statiques suivantes de la classe :

Chacune renvoie la matrice source avec la transformation appliquée.

La méthode skew()

La méthode skew() incline la matrice en ajustant les propriétés b et c de la matrice. Un paramètre facultatif, unit, détermine les unités utilisées pour définir l'angle d'inclinaison et, le cas échéant, la méthode convertit la valeur angle en radians :

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

Un objet Matrix skewMatrix est créé et ajusté pour appliquer la transformation par inclinaison. Au départ, il s'agit de la matrice d'identité, comme suit :

var skewMatrix:Matrix = new Matrix();

Le paramètre skewSide détermine le côté auquel l'inclinaison est appliquée. S'il est défini sur "right", le code suivant définit la propriété b de la matrice :

skewMatrix.b = Math.tan(angle);

Autrement, le côté inférieur est incliné en ajustant la propriété c de la matrice, comme suit :

skewMatrix.c = Math.tan(angle);

L'inclinaison résultante est ensuite appliquée à la matrice existante en concaténant les deux matrices, comme indiqué dans l'exemple suivant :

sourceMatrix.concat(skewMatrix);
return sourceMatrix;

La méthode scale()

Comme le montre l'exemple suivant, la méthode scale() ajuste d'abord le facteur de redimensionnement s'il est fourni sous la forme d'un pourcentage puis utilise la méthode scale() de l'objet matrix :

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

La méthode translate()

La méthode translate() applique simplement les facteurs de translation dx et dy en appelant la méthode translate() de l'objet matrix, comme suit :

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

La méthode rotate()

La méthode rotate() convertit le facteur de rotation d'entrée en radians (s'il est fourni en degrés ou dégradés) puis appelle la méthode rotate() de l'objet matrix :

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

Appel de la méthode MatrixTransformer.transform() depuis l'application

L'application contient une interface utilisateur permettant d'obtenir les paramètres de transformation de l'utilisateur. Elle les transmet ensuite, avec la propriété matrix de la propriété transform de l'objet d'affichage, à la méthode Matrix.transform(), comme suit :

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

L'application applique ensuite la valeur renvoyée à la propriété matrix de la propriété transform de l'objet d'affichage. Ainsi, la transformation est déclenchée :

img.content.transform.matrix = tempMatrix;


Flash CS3

 

M'envoyer un message électronique lorsque des commentaires sont ajoutés à cette page | Rapport de commentaire

Page en cours: http://livedocs.adobe.com/flash/9.0_fr/main/00000189.html