Esempio: Applicazione di una trasformazione di matrice a un oggetto di visualizzazione

L'applicazione di esempio DisplayObjectTransformer illustra una serie di impieghi della classe Matrix per trasformare un oggetto di visualizzazione nei modi seguenti:

L'applicazione comprende un'interfaccia che permette di modificare i parametri della trasformazione di matrice nel modo seguente:


Immagine che riporta l'interfaccia dell'applicazione con le opzioni in verticale. Cinque indicatori di scorrimento (Scale X, Scale Y, Move X, Move Y e Rotate) sono seguiti da un pulsante di scelta (Skew Mode) e un indicatore di scorrimento (Skew angle).

Quando l'utente seleziona il pulsante Transform, l'applicazione applica la trasformazione impostata.


Due immagini che rappresentano la foto originale della banana e la foto ruotata di -45 gradi e ridotta del 50%.

L'oggetto di visualizzazione originale e l'oggetto ruotato di -45˚ e ridotto del 50%


Per ottenere i file dell'applicazione per questo esempio, accedere all'indirizzo www.adobe.com/go/learn_programmingAS3samples_flash_it. I file dell'applicazione DisplayObjectTransformer si trovano nella cartella Samples/DisplayObjectTransformer. L'applicazione comprende i seguenti file:

File

Descrizione

DisplayObjectTransformer.mxml

o

DisplayObjectTransformer.fla

Il file principale dell'applicazione in Flash (FLA) o Flex (MXML)

com/example/programmingas3/geometry/MatrixTransformer.as

Classe che contiene metodi per applicare trasformazioni di matrice.

img/

Directory che contiene file immagine di esempio utilizzati dall'applicazione.

Sezioni

Definizione della classe MatrixTransformer
Chiamata al metodo MatrixTransformer.transform() dall'applicazione

Definizione della classe MatrixTransformer

La classe MatrixTransformer comprende dei metodi statici che applicano trasformazioni geometriche degli oggetti Matrix.

Metodo transform()

Il metodo transform() comprende parametri per gli elementi seguenti:

Il valore restituito è la matrice risultante.

Il metodo transform() chiama i seguenti metodi statici della classe:

Ognuno restituisce la matrice di partenza con la trasformazione applicata.

Metodo skew()

Il metodo skew() inclina la matrice modificando le proprietà b e c della matrice stessa. Un parametro facoltativo, unit, stabilisce le unità in cui è definito l'angolo di inclinazione e, se necessario, il metodo converte il valore angle in radianti:

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

L'oggetto Matrix skewMatrix viene creato e modificato in base al valore di inclinazione. Inizialmente si tratta della matrice di identità:

var skewMatrix:Matrix = new Matrix();

Il parametro skewSide determina il lato a cui va applicata l'inclinazione. Se il parametro è impostato su "right", il codice seguente imposta la proprietà b della matrice:

skewMatrix.b = Math.tan(angle);

Altrimenti, il lato inferiore viene inclinato modificando la proprietà c dell'oggetto Matrix nel modo seguente:

skewMatrix.c = Math.tan(angle);

L'inclinazione risultante viene applicata alla matrice esistente concatenando le due matrici, come illustra l'esempio seguente:

sourceMatrix.concat(skewMatrix);
return sourceMatrix;

Metodo scale()

Come illustra l'esempio seguente, il metodo scale() prima modifica il fattore di scala, se espresso in valore di percentuale, quindi usa il metodo scale() dell'oggetto Matrix:

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

Metodo translate()

Il metodo translate() semplicemente applica i fattori di conversione dx e dy chiamando il metodo translate() dell'oggetto Matrix come segue:

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

Metodo rotate()

Il metodo rotate() converte il fattore di rotazione specificato in radianti (se espresso in gradi o gradienti), quindi chiama il metodo rotate() dell'oggetto Matrix:

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

Chiamata al metodo MatrixTransformer.transform() dall'applicazione

L'applicazione comprende un'interfaccia utente tramite la quale l'utente può specificare i parametri di trasformazione. Tali parametri vengono quindi passati, insieme alla proprietà matrix della proprietà transform dell'oggetto di visualizzazione, al metodo Matrix.transform() nel modo seguente:

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

L'applicazione quindi applica il valore restituito alla proprietà matrix della proprietà transform dell'oggetto di visualizzazione, attivando in questo modo la trasformazione:

img.content.transform.matrix = tempMatrix;


Flash CS3

 

Inviami un messaggio e-mail quando vengono aggiunti dei commenti a questa | Rapporto sui commenti

Pagina corrente: http://livedocs.adobe.com/flash/9.0_it/main/00000189.html