API çizme örneği: Algoritmik Görsel Oluşturucu

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

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.