Algoritmik Görsel Efekt Oluşturucu örneği, dinamik olarak sahne alanına birçok "uydu" veya dairesel bir yörüngede hareket eden daireler çizer. Keşfedilen özellikler arasında şunlar yer alır:
-
Dinamik görünüme sahip temel bir şekil çizmek için çizim API'sini kullanma
-
Çizimde kullanılan özelliklerle kullanıcı etkileşimini bağlama
-
Her karede sahne alanını temizleyip yeniden çizim yaparak animasyon yürütme
Önceki alt bölümde verilen örnek,
Event.ENTER_FRAME
olayını kullanarak tek bir "uyduya" animasyon uygulamıştı. Bu örnek, birçok uydu görünümünü hemen güncelleyen kaydırıcıların bulunduğu bir kontrol paneli oluşturarak bu işlemi genişletir. Bu örnek, kodu harici sınıflar olarak biçimlendirir ve uydu oluşturma kodunu bir döngüye sararak
satellites
dizisindeki her uydunun başvurusunu saklar.
Bu örneğin uygulama dosyalarını edinmek için bkz.
www.adobe.com/go/learn_programmingAS3samples_flash_tr
. Uygulama dosyalarını Samples/AlgorithmicVisualGenerator klasöründe bulabilirsiniz. Bu klasör şu dosyaları içerir:
File
|
Açıklama
|
AlgorithmicVisualGenerator.fla
|
Flash Professional'daki (FLA) ana uygulama dosyası.
|
com/example/programmingas3/algorithmic/AlgorithmicVisualGenerator.as
|
Sahne alanına uyduları çizme ve uydu çizimini etkileyen değişkenleri güncellemek için kontrol panelinden gelen olayları yanıtlama gibi ana uygulama işlevlerini sağlayan sınıf.
|
com/example/programmingas3/algorithmic/ControlPanel.as
|
Birçok kaydırıcıyla kullanıcı etkileşimini yöneten ve kullanıcı etkileşimi oluştuğunda olaylar gönderen bir sınıf.
|
com/example/programmingas3/algorithmic/Satellite.as
|
Bir merkez noktası etrafındaki yörüngede dönen görüntüleme nesnesini temsil eden ve bu görüntüleme nesnesinin geçerli çizim durumuyla ilgili özellikleri içeren bir sınıf.
|
Dinleyicileri ayarlama
Uygulama ilk olarak üç dinleyici oluşturur. Birinci dinleyici, kontrol panelinden gönderilen ve uyduların yeniden oluşturulmasının gerektiği olayları dinler. İkinci dinleyici, SWF dosyasının sahne alanının boyutuna yapılan değişiklikleri dinler. Üçüncü dinleyici,
doEveryFrame()
işlevi kullanılarak yeniden çizim yapılması için, SWF dosyasındaki ilerleyen her kareyi dinler.
Uyduları oluşturma
Dinleyiciler ayarlandıktan sonra,
build()
işlevi çağrılır. Bu işlev,
satellites
dizisini boşaltıp sahne alanına yapılan önceki çizimleri temizleyen
clear()
işlevini çağırır. Bunun gerekli olmasının nedeni, kontrol paneli
build()
işlevini yeniden çağırmak için bir olay gönderdiğinde (örn. renk ayarları değiştirildiğinde) söz konusu işlevin yeniden çağrılabilmesidir. Bu durumda uyduların kaldırılıp yeniden oluşturulması gerekir.
Bu işlev daha sonra, yörüngede rastgele bir konumda başlayan
position
değişkeni ve bu örnekte uydu oluşturulduktan sonra değişmeyen
color
değişkeni gibi, oluşturma için gerekli başlangıç özelliklerini ayarlayarak uyduları oluşturur.
Her uydu oluşturulduğunda,
satellites
dizisine o uydunun başvurusu eklenir.
doEveryFrame()
işlevi çağrıldığında, bu dizideki tüm uydulara güncellenir.
Uydu konumunu güncelleme
doEveryFrame()
işlevi, uygulamanın animasyon işleminin kalbidir. SWF dosyasının kare hızına eşit bir hızda her kare için çağrılır. Çizim değişkenleri değiştiğinden, bu, animasyonun görünümünü yürütür.
Bu işlev ilk önce tüm çizimleri temizler ve arka planı yeniden çizer. Daha sonra bu işlev her uydu kabında döngü gerçekleştirir, her uydunun
position
özelliğini artırır ve kontrol paneliyle kullanıcı etkileşimi sonucunda değiştirilmiş olabilecek
radius
ve
orbitRadius
özelliklerini günceller. Son olarak uydu, Satellite sınıfının
draw()
yöntemini çağırarak yeni konumuna güncellenir.
Sayacın (
i
) yalnızca
visibleSatellites
değişkenine kadar artış yaptığını unutmayın. Bunun nedeni, kullanıcının kontrol paneli üzerinden görüntülenen sınırlı sayıda uyduya sahip olması durumunda, döngüdeki kalan uyduların yeniden çizilmeyip gizlenmesinin gerekmesidir. Bu, çizimden sorumlu döngüden hemen sonra gelen bir döngüde gerçekleşir.
doEveryFrame() işlevi tamamlandığında, ekranda
visibleSatellites
öğelerinin konumu güncellenir.
Kullanıcı etkileşimine yanıt verme
Kullanıcı etkileşimi, ControlPanel sınıfı tarafından yönetilen kontrol paneli aracılığıyla gerçekleşir. Bu sınıf her kaydırıcının minimum, maksimum ve varsayılan değerleriyle birlikte bir dinleyici ayarlar. Kullanıcı bu kaydırıcıları hareket ettirdikçe,
changeSetting()
işlevi çağrılır. Bu işlev, kontrol panelinin özelliklerini günceller. Değişiklik, görüntünün yeniden oluşturulmasını gerektiriyorsa, daha sonra ana uygulama dosyasında işlenen bir olay gönderilir. Kontrol paneli ayarları değiştikçe,
doEveryFrame()
işlevi her uyduyu güncellenmiş değişkenlerle çizer.
Daha fazla özelleştirme
Bu örnek, çizim API'si kullanılarak nasıl görsel efektler oluşturulduğuna yönelik temel bir şemadır. Bu, karmaşık görünen bir etkileşim deneyimi oluşturmak için nispeten daha az kod satırı kullanır. Yine de bu örnek küçük değişikliklerle genişletilebilir. Birkaç fikir:
-
doEveryFrame()
işlevi, uydunun renk değerini artırabilir.
-
doEveryFrame()
işlevi, uydu yarıçapını daraltabilir veya genişletebilir.
-
Uydu yarıçapının dairesel olması gerekmez; örneğin bir sinüs dalgasına göre hareket etmek için Math sınıfını kullanabilir.
-
Uydular diğer uydularla vuruş algılama özelliğini kullanabilir.
Çizim API'si, çalışma zamanında temel şekiller çizilerek, Flash geliştirme ortamında görsel efektler oluşturulmasına alternatif olarak kullanılabilir. Diğer yandan, elle oluşturulması mümkün olmayan çeşit ve kapsamda görsel efektler oluşturmak için de kullanılabilir. ActionScript yazarı, çizim API'si ve biraz matematik kullanarak birçok beklenmedik oluşturma işlemini gerçekleştirebilir.
|
|
|