Geometri örneği: Görüntüleme nesnesine matris dönüştürmesi uygulama

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

DisplayObjectTransformer örnek uygulaması, görüntüleme nesnesini dönüştürmek için matrix sınıfının özelliklerinin kullanılmasının birçok özelliğini gösterir, bu özellikler arasında şunlar yer alır:

  • Görüntüleme nesnesini döndürme

  • Görüntüleme nesnesini ölçekleme

  • Görüntüleme nesnesini çevirme (yeniden konumlandırma)

  • Görüntüleme nesnesini eğme

Bu uygulama, aşağıdaki gibi, matris dönüştürmesinin parametrelerinin ayarlanması için bir arabirim sağlar:

Kullanıcı Dönüştürme düğmesini tıklattığında, uygulama ilgili dönüştürmeyi uygular.

Orijinal görüntüleme nesnesi ve -45° döndürülmüş ve %50 ölçeklenmiş görüntüleme nesnesi

Bu örneğin uygulama dosyalarını edinmek için bkz. www.adobe.com/go/learn_programmingAS3samples_flash_tr. DisplayObjectTransformer uygulama dosyalarını Samples/DisplayObjectTransformer klasörü içinde bulabilirsiniz. Uygulama aşağıdaki dosyaları içerir:

File

Açıklama

DisplayObjectTransformer.mxml

veya

DisplayObjectTransformer.fla

Flash (FLA) veya Flex (MXML) içindeki ana uygulama dosyası

com/example/programmingas3/geometry/MatrixTransformer.as

Matris dönüştürmelerinin uygulanmasına yönelik yöntemleri içeren bir sınıf.

img/

Uygulama tarafından kullanılan örnek görüntü dosyalarını içeren bir dizin.

MatrixTransformer sınıfını tanımlama

MatrixTransformer sınıfı, Matrix nesnelerinin geometrik dönüştürmelerini uygulayan statik yöntemleri içerir.

transform() yöntemi

transform() yöntemi, aşağıdakilerden her biri için parametreler içerir:

  • sourceMatrix—Yöntemin dönüştürdüğü girdi matrisi

  • xScale ve yScalex ve y ölçek faktörü

  • dx ve dy—Piksel cinsinden x ve y çevirme miktarları

  • rotation—Derece cinsinden dönüş miktarı

  • skew—Yüzde olarak eğme faktörü

  • skewType"right" veya "left" olmak üzere eğme yönü

Döndürme değeri, sonuçta elde edilen matristir.

transform() yöntemi, sınıfın şu statik yöntemlerini çağırır:

  • skew()

  • scale()

  • translate()

  • rotate()

Her biri, dönüştürme uygulanmış şekilde kaynak matrisi döndürür.

skew() yöntemi

skew() yöntemi, matrisin b ve c özelliklerini ayarlayarak matrisi eğer. İsteğe bağlı bir parametre olan unit, eğme açısını tanımlamak için birimleri belirler ve gerekirse bu yöntem angle değerini radyanlara dönüştürür:

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

skewMatrix Matrix nesnesi oluşturulur ve eğme dönüştürmesini uygulamak için ayarlanır. Başlangıçta bu aşağıdaki gibi kimlik matrisidir:

var skewMatrix:Matrix = new Matrix();

skewSide parametresi, eğimin uygulandığı kenarı belirler. Bu "right" olarak ayarlanırsa, aşağıdaki kod, matrisin b özelliğini ayarlar:

skewMatrix.b = Math.tan(angle);

Aksi takdirde, Matrix öğesinin c özelliği ayarlanarak aşağıdaki gibi alt kenar eğilir:

skewMatrix.c = Math.tan(angle);

Daha sonra aşağıdaki örnekte de gösterildiği gibi iki matris bitiştirilerek, sonuçta elde edilen eğim, varolan matrise uygulanır:

sourceMatrix.concat(skewMatrix); 
return sourceMatrix;

scale() yöntemi

Aşağıdaki örnekte gösterildiği gibi, scale() yöntemi öncelikle yüzde olarak sağlanmış bir ölçek faktörü varsa bu ölçek faktörünü ayarlar ve sonra da matris nesnesinin scale() yöntemini kullanır:

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

translate() yöntemi

translate() yöntemi yalnızca aşağıdaki gibi, matris nesnesinin translate() yöntemini çağırarak dx ve dy çevirme faktörlerini uygular:

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

rotate() yöntemi

rotate() yöntemi, girdi dönüşü faktörünü radyanlara dönüştürür (derece veya degrade olarak sağlanmışsa), sonra da matris nesnesinin rotate() yöntemini çağırır:

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

Uygulamadan MatrixTransformer.transform() yöntemini çağırma

Uygulama, kullanıcıdan dönüştürme parametrelerinin alınması için bir kullanıcı arabirimi içerir. Daha sonra bu değerleri, aşağıda görüldüğü gibi, görüntüleme nesnesinintransform özelliğininmatrix özelliğiyle birlikte Matrix.transform() yöntemine iletir:

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

Daha sonra uygulama, döndürme değerini, görüntü nesnesinin transform özelliğinin matrix özelliğine uygulayarak dönüştürmeyi tetikler:

img.content.transform.matrix = tempMatrix;