Kar Yağışı Efekti


Kar yağışı efekti hazırlamada birden daha fazla yöntemi vardır. Ortak komut duplicateMovieClip komutudur. Hazırladığımız swf dosyası bu efekti oluşturabilecek en basit komutlarla hazırlanmıştır. En doğru yöntem bu değilse de gerek işlevselliği gerekse basitliği tercih sebebi olabilir.

DOSYAYI İNDİR   

Animasyonu oluşturalım:

1-Önce sahneye arkaplanda kullanacağımız resmi import edelim. İnsert-->New Symbol komutu verelim ve davranış olarak grafik seçimini yapalım. Sahneye oval aracı ile 3*3 piksellik beyaz renkli bir daire çizelim. bu kar tanesini temsil etmektedir. isterseniz gradient bir renkte kullanabilirsiniz.

2- Tekrar New Symbol komutunu verelim ve davranış olarak movie clip seçeneğini kullanalım. Klibin sahnedeki katmanın sol köşesine çift tıklama yaparak katman özellikleri panelini açalım ve katman özelliği olarak Guide seçeneğini işaretleyelim. Bu klavuz katmana çizgi aracı ile aşağıdakine benzer bir çizim yapalım:

Alta bir katman daha ekleyip kütüphaneden az evvel oluşturduğumuz kar grafiğini bu çizginin başlangıcına yerleştirelim.
Bu katman otomatik olarak klavuzlanmış katman olacaktır.Şayet otomatik değişim olmazsa yukardaki işlemi tekrar layarak katman özelliği olarak Guided seçeneğini işaretleyelim.Burada kar hareketini yapacak bir motion tween oluşturalım. Bunu yapmazsak kar hareketi düşecek tarzda ve düz bir doğrultuda olacaktır. Rüzgardan uçuşan bir kar tanesi görüntüsü için bu animasyonu oluşturduk.

3- New Symbol komutu ile son bir klip oluşturalım. İlk katmanda 3 tane boş keyframe oluşturalım. Bu katmanın altına yeni bir katman ekleyelim ve kütüphaneden son oluşturduğumuz(2 nolu maddede anlatılan)kar klibini sahneye çekelim ve örnek adı olarak kar0 yazalım. Bu sıfır eklentisi önemlidir. Bu rakamı daha sonra actionscriptte kullanacağız.

4- Şimdi 1.katmandaki 1.kareyi seçelim ve şu komutu atayalım:

max_kar = 100;
i = 1;

Max_kar=100 duplicate komutu ile çoğaltılacak klibin sayısını vermektedir. Yani klip en fazla 100 kere çoğaltılacaktır. i=1 ikinci karede kullanılacak i değişkeninin başladığı ilk değer olacaktır.

5- İkinci kareye atanacak komutlar:

duplicateMovieClip("kar"+(i-1), "kar"+i, i);
setProperty("kar"+i, _x, getProperty ( "kar"+(i - 1), _x)-2);
setProperty("kar"+i, _y, getProperty("kar"+(i-1),_y)+i/5);
setProperty("kar"+i, _xscale, getProperty("kar"+(i-1),_xscale)+1);
setProperty("kar"+i, _yscale, getProperty("kar"+(i-1),_yscale)+0.5);
i++

İlk dizinde kar0 klibi çoğaltılmaktadır. Burada kar0 değilde "kar"+(i-1) olarak yazılma nedeni şudur.i değişkenine 1.karede 1 değeri atanmıştı.bu durumda i-1= 1-1 bu da 0 değerini vermektedir. Dolayısı ile ilk dizinde çoğaltılacak klip kar0 (yani örnek adı kar0 olan klibimiz) olacaktır. Alttaki i++ değerine dikkat edin İ++ değeri 1+1=2 değerini verecektir. Film 3.kareye gittiğinde geri döndüren bir komut nedeni ile tekrar 2.kareye dönecektir. Fakat i değeri artık 2 olmuştur. Bu durumda ilk dizinde "kar"+(i-1)= kar1 klibi olacaktır. Böylece oynatma kafası her 2.kareye döndüğünde klip 2, 3, 4, 5.... şeklinde artarak 100 klibe kadar çoğaltılacaktır. Aynı mantık diğer komutlarda da vardır.

Çoğaltılan kar0 klibinin örneğine ilk dizinde kar+i yani kar1 adı verilmişti. 2.dizindeki setProperty komutu ile çoğaltılmış olan kar1 klibinin x düzlemi, getProperty komutu ile alınan kar+(i-1)= kar0 klibinin x ekseninden 2 piksel eksiği olarak ayarlamıştır.

Aynı işlem 3. dizinde y eksenine i/5 değeri eklenerek yapılmıştır.

4 ve 5. dizinde de aynı mantıkla kar aşağı doğru hareket ettikçe bir miktar büyümesini sağlayacaktır.

Son dizinde i değeri bir sayı artırılmaktadır.

6- Üçüncü ve son kareye atanan komutlar:

if (i<=max_kar) {
gotoAndPlay(2);
} else {
stop();
}

i değeri 100 olana kadar oynatma kafası 2. kareye gönderilerek buradaki komutlar tekrar işleme girmektedir. Else ifadesi ile i değeri 100 olunca film klibinin çoğalması duracak ve oynatma kafası 3.karede sabitlenecektir.

Kod işlemimi bu kadar.

Yalnız kod mantığını anlamanız için kısa bir tekrar yapalım:

1.karede maksimum i değeri 100 olarak belirleniyor ve i değişkenine 1 değeri veriliyor. Yukarda ikinci karede i yerine 1 yazdığınızda şu sonuçlar çıkacaktır. Önce 1 değerini yerleştirin ve alttaki cümleleri okuyun.

duplicateMovieClip(kar0, kar1, i); =kar0 filmimiz bir tane kopyalanıp adı kar1 oluyor ve 1.level`a yerleştiriliyor.

setProperty(kar1, _x, getProperty (kar0, _x)-2);=Yeni oluşturulan kar1 klibinin x düzlemi kar0 klibinin x düzleminden 2 piksel az olarak oluşturuluyor. Aynı yöntemlerle oluşturulan klip1 kopyasının y düzlemi , en ve boyu değiştiriliyor.

Son dizinde de İ++ ile i değeri 2 olarak atanıyor, başka komut olmadığından oynatma kafası 3. kareye atlıyor.

3. karede i değeri 100 ise animasyon duruyor , daha az değerde ise ( ki şu anda 2 değerinde) tekrar 2. kareye gidiyor. Burada aynı işlemler tekrarlanıyor. Tek fark artık klip1 örneğinin klip2 örneği oluşturuluyor ve böylece 100 klip kopyası oluşturulana kadar devam ediyor.

7- Ana sahneye dönelim. Burada sadece bir resim var. Üste bir katman ekleyelim ve kütüphaneden az evvel kodlarını eklediğimiz film klibini sahneye çekelim. Oluşturduğumuz kodlarla 1. film klibi 100 adet kopya oluşturacaktır. Bu rakam bizim için az olduğundan resimin üst sol, orta ve sağ kısmına ve yine resmin tam orta kısmına 20 şer adet olacak şekilde aynı klibi kütüphaneden sahneye alalım. Değişik yerlere yerleştirilen bu klibin mesela 100 adet örneğini sahneye alalım. Bu durumda 100x100=10.000 tane kar tanesi sahnede dans edecektir. Bu sayı sizin zevkinize bağlıdır. Çok aşırı yerleştirildiğinde görüntüdeki kar yağma oranı artacaktır.

Örneğin eleştirisi: Baştada belittiğim gibi uygun kodlar bunlar olmayabilir. Math.random ve döngü komutları ile klip daha uygun oluşturulabilir. Fakat çok tecrübeli olmayan kullanıcılar için buradaki kod mantığı daha anlaşılır olduğundan bu yöntem tercih edilmiştir.