Nesnelere animasyon uygulama

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

Animasyon, bir şeyi hareket ettirme veya alternatif olarak, bir şeyin zamanla değişmesini sağlama işlemidir. Komut dosyası içeren animasyon, video oyunlarının temel parçası olup genellikle diğer uygulamalara düzgün ve kullanışlı etkileşim ipuçları eklemek için kullanılır.

Komut dosyası içeren animasyonun arkasındaki asıl düşünce, bir değişim gerçekleşmesi ve değişimin zamanla artış birimlerine ayrılmasının gerektiğidir. Yaygın bir döngü deyimi kullanarak bir şeyin ActionScript'te yinelenmesini sağlamak kolaydır. Ancak, görüntü güncellenmeden önce bir döngü tüm yinelemelerini gerçekleştirir. Komut dosyası içeren animasyon oluşturmak için, zamanla aynı eylemi art arda gerçekleştiren ve her çalıştırıldığında ekranı güncelleyen ActionScript yazmanız gerekir.

Örneğin, bir topun ekranda gezinmesini sağlamak gibi basit bir animasyon oluşturmak istediğinizi varsayın. ActionScript, zaman akışını izlemenize ve uygun şekilde ekranı güncellemenize olanak sağlayan basit bir mekanizma içerir, başka bir deyişle, hedefine ulaşıncaya kadar topun her seferinde küçük bir miktar hareket etmesini sağlayan bir kod yazabilirsiniz. Her hareketten sonra ekran güncellenerek Sahne Alanı üzerindeki hareketin izleyen tarafından görülebilmesini sağlar.

Pratik açıdan ele alındığında, SWF dosyasının kare hızı, Flash Player veya AIR'in ekranı güncelleme hızı olduğundan, komut dosyası içeren animasyonun, SWF dosyasının kare hızıyla senkronize edilmesi (başka bir deyişle, her yeni bir kare görüntülendiğinde veya görüntüleneceğinde bir animasyonun değişmesinin sağlanması) akıllıcadır. Her görüntüleme nesnesi, kare başına bir olay olmak üzere SWF dosyasının kare hızına göre gönderilen bir enterFrame olayına sahiptir. Komut dosyası içeren animasyonlar oluşturan geliştiricilerin çoğu, zamanla yinelenen eylemler oluşturmanın bir yolu olarak enterFrame olayını kullanır. enterFrame olayını dinleyip animasyon uygulanmış topu her karede belirli bir miktar hareket ettiren bir kod yazabilirsiniz ve ekran güncellendikçe (her karede), top yeni konumunda yeniden çizilerek hareket oluşturulur.

Not: Zamanla art arda bir eylem gerçekleştirmenin başka bir yolu da Timer sınıfının kullanılmasıdır. Belirtilen bir zaman miktarı her geçtiğinde, Timer örneği bir olay bildirimini tetikler. Timer sınıfının zamanlayıcı olayını işleyerek animasyon gerçekleştiren kod yazabilir, zaman aralığını daha küçük bir zaman aralığına (saniye kesrine) ayarlayabilirsiniz. Timer sınıfını kullanma hakkında daha fazla bilgi için, bkz. Zaman aralıklarını denetleme.

Aşağıdaki örnekte, Sahne Alanı'nda circle adında bir daire Sprite örneği oluşturulur. Kullanıcı daireyi tıklattığında, komut dosyası içeren bir animasyon dizisi başlayarak circle öğesinin tamamen saydam oluncaya kadar solmasını (alpha özelliği azaltılır) sağlar:

import flash.display.Sprite; 
import flash.events.Event; 
import flash.events.MouseEvent; 
 
// draw a circle and add it to the display list 
var circle:Sprite = new Sprite(); 
circle.graphics.beginFill(0x990000); 
circle.graphics.drawCircle(50, 50, 50); 
circle.graphics.endFill(); 
addChild(circle); 
 
// When this animation starts, this function is called every frame. 
// The change made by this function (updated to the screen every 
// frame) is what causes the animation to occur. 
function fadeCircle(event:Event):void 
{ 
    circle.alpha -= .05; 
     
    if (circle.alpha <= 0) 
    { 
        circle.removeEventListener(Event.ENTER_FRAME, fadeCircle); 
    } 
} 
 
function startAnimation(event:MouseEvent):void 
{ 
    circle.addEventListener(Event.ENTER_FRAME, fadeCircle); 
} 
 
circle.addEventListener(MouseEvent.CLICK, startAnimation);

Kullanıcı daireyi tıklattığında, fadeCircle() işlevi, enterFrame olayının dinleyicisi olarak abone olur, başka bir deyişle, her karede çağrılmaya başlar. Bu işlev, alpha özelliğini değiştirerek circle öğesini soldurur, böylece her karede bir defa dairenin alpha değeri 0,05 (yüzde 5) azalır ve ekran güncellenir. Sonuç olarak, alpha değeri 0 olduğunda (circle tamamen saydam olduğunda), fadeCircle() işlevi bir olay dinleyicisi olarak kaldırılır ve animasyon sona erer.

Aynı kod, örneğin, solma yerine animasyon uygulanmış hareket oluşturmak için de kullanılabilir. enterFrame olay dinleyicisi olan bir işlevde alpha için farklı bir özelliğin getirilmesiyle bunun yerine söz konusu özelliğe animasyon uygulanır. Örneğin, bu satır

    circle.alpha -= .05;

bu koda dönüştürüldüğünde,

    circle.x += 5;

x özelliğine animasyon uygulanarak dairenin Sahne Alanı üzerinde sağa doğru hareket etmesi sağlanır. İstenen x koordinatına ulaşıldığında, animasyonu durdurmak için (başka bir deyişle, enterFrame dinleyicisinin aboneliğini kaldırmak için), animasyonu sonlandıran koşul değiştirilebilir.