Przykład dotyczący geometrii: zastosowanie transformacji macierzowej do obiektu wyświetlanegoFlash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje Przykładowa aplikacja DisplayObjectTransformer ilustruje szereg możliwości zastosowania klasy Matrix do transformowania obiektu wyświetlanego, między innymi:
Aplikacja udostępnia interfejs służący do modyfikowania parametrów transformacji macierzowej. Interfejs ten przedstawiono na poniższej ilustracji. ![]() Kliknięcie przycisku Transform powoduje zastosowanie odpowiedniej transformacji. ![]() Oryginalny obiekt wyświetlany i obiekt wyświetlany obrócony o -45° i przeskalowany o 50% Aby pobrać pliki tej przykładowej aplikacji, należy przejść na stronę www.adobe.com/go/learn_programmingAS3samples_flash_pl. Pliki aplikacji DisplayObjectTransformer znajdują się w folderze Samples/DisplayObjectTransformer. Aplikacja składa się z następujących plików:
Definiowanie klasy MatrixTransformerKlasa MatrixTransformer zawiera metody statyczne, które stosują transformacje geometryczne opisane przez obiekty klasy Matrix. Metoda transform()Metoda transform() ma następujące parametry:
Wartością zwracaną jest wynikowa macierz. Metoda transform() wywołuje następujące metody statyczne klasy:
Każda z tych metod zwraca macierz źródłową poddaną transformacji. Metoda skew()Metoda skew() pochyla macierz, modyfikując jej właściwości b i c. Opcjonalny parametr unit określa jednostki, w jakich wyrażony jest kąt pochylenia; w razie potrzeby metoda przelicza wartość angle na radiany: if (unit == "degrees")
{
angle = Math.PI * 2 * angle / 360;
}
if (unit == "gradients")
{
angle = Math.PI * 2 * angle / 100;
}
Tworzony jest obiekt klasy Matrix o nazwie skewMatrix, a jego właściwości są odpowiednio modyfikowane w celu zastosowania pochylenia. Początkowo jest to macierz jednostkowa: var skewMatrix:Matrix = new Matrix(); Parametr skewSide określa, w którą stronę ma się odbywać pochylenie. Jeśli właściwość ta ma wartość "right", poniższy kod nadaje wartość właściwości b macierzy: skewMatrix.b = Math.tan(angle); W przeciwnym razie pochylana jest dolna strona w wyniku zmiany wartości właściwości c obiektu Matrix: skewMatrix.c = Math.tan(angle); Wynikowe pochylenie jest następnie stosowane do istniejącej macierzy poprzez konkatenację dwóch macierzy, co ilustruje poniższy przykład: sourceMatrix.concat(skewMatrix); return sourceMatrix; Metoda scale()Tak, jak ilustruje to poniższy przykład, metoda scale() najpierw dopasowuje współczynnik skali, jeśli został podany jako wartość procentowa, a następnie wywołuje metodę scale() obiektu macierzy: if (percent)
{
xScale = xScale / 100;
yScale = yScale / 100;
}
sourceMatrix.scale(xScale, yScale);
return sourceMatrix;
Metoda translate()Metoda translate() uwzględnia współczynniki translacji dx i dy, wywołując metodę translate() obiektu macierzy: sourceMatrix.translate(dx, dy); return sourceMatrix; Metoda rotate()Metoda rotate() przelicza podany kąt obrotu na radiany (jeśli podano go w stopniach lub gradusach), a następnie wywołuje metodę rotate() obiektu macierzy: if (unit == "degrees")
{
angle = Math.PI * 2 * angle / 360;
}
if (unit == "gradients")
{
angle = Math.PI * 2 * angle / 100;
}
sourceMatrix.rotate(angle);
return sourceMatrix;
Wywoływanie metody MatrixTransformer.transform() z aplikacjiAplikacja zawiera interfejs użytkownika umożliwiający wprowadzanie parametrów przekształceń. Wartości te są następnie przekazywane razem z właściwością matrix właściwości transform obiektu wyświetlanego do metody Matrix.transform(), tak jak przedstawiono to poniżej: tempMatrix = MatrixTransformer.transform(tempMatrix,
xScaleSlider.value,
yScaleSlider.value,
dxSlider.value,
dySlider.value,
rotationSlider.value,
skewSlider.value,
skewSide );
Następnie aplikacja stosuje zwróconą wartość do właściwości matrix właściwości transform obiektu wyświetlanego, wywołując tym samym właściwą transformację: img.content.transform.matrix = tempMatrix; |
|