Değişken Örnekleri-7


Animasyonunuzda birden fazla koşulunuz varsa tek bir else ifadesi yeterli olmayacaktır. Koşullu deyimlerin dallandırılmasına ihtiyacınız vardır. Bu örneğimizde böceğin hareketi farklı tuş basımlarına göre sağlandığından Key nesnesi ve dallandırılan koşullu deyimler (else if) kullandık.

NOT= Yukardaki animasyonda çalışmayı tetiklemek için sahneye bir kez boş tıklama yapın sonra klavye tuşlarını kullanın.

1- Bir film klibi oluşturalım ve sahneye yerleştirerek adlandıralım.(bocek)

2- Film klibini seçip actionscript panelini açalım.onClipEvent(enterFrame)klip olayını seçelim.Statament-->Condutions/Loops--> If komutunu girelim. Condition alanına Built in Classes-->Movie-->Key-->Methods-->isDown komutunu girelim. Key Code alanına Key.UP yazalım. (key.isDown(Key.UP) ).Bu komut yukarı tuşa basılıp basılmadığını kontrol eder.

3- setProperty komutunu girelim. Property alanına _rotation, target alanına this, Value alanına 0 yazın.Tekrar setProperty komutunu girin. Property alanına _y, target alanına this, value alanına this._y -30 yazalım.

Buraya kadar şunları yaptık: Önce klavyeden üst ok tuşuna basılmasını denetledik. Şayet basılmışsa film klibinin rotasyon yapmamasını ve 30 piksel y yönünde yani yukarı hareketini sağladık. Eksi yazılmasının nedeni y eksenin yukarı doğru değer kaybetmesi aşağı doğru değer kazanmasıdır. Şimdi aynı işlemi diğer 3 yön tuşu içinde yapacağız.

4- else if komutunu girin. Yani üst ok tuşuna basılmamışsa şunları yapın diyeceğiz. Condition alanına Key.isDown(Key.RIGHT) yazın.3. şıktaki gibi iki kez setproperty komutunu girin. İlkine rotasyon değeri olarak 90, ikincisinde _x eksenini seçin ve value alanına this._x +30 yazın. + yazma nedenimiz x ekseninin sağa doğru değerinin artması, sola doğru değerinin azalmasındandır.

Bu komutlarla önce üst ok tuşuna basılıp basılmadığı araştırıldı.Şayet basılmışsa dönme hareketi olmadan 30 piksel yukarı hareketi sağlandı. Şayet üst yön tuşuna basılmayıp sağ yön tuşuna basılmışsa böceğin sağa doğru 90 derece dönmesi ve 30 piksel ilerlemesi sağlandı.

5- Tekrar else if komutunu girelim. Condition alanına Key.isDown(Key.DOWN) yazalım , iki kez setProperty komutunu ekleyelim.İlkinde değer alanına 180, ikincisinde ise this._y +30 yazalım. Bu tuşa basıldığında böcek 180 derece dönecek ve aşağıya 30 piksel ilerleyecektir.

6- Aynı işlemi sol yön tuşu içinde yapalım. Else if komutunu verelim. Condition alanına Key.isDown(Key.LEFT) yazalım. Yine iki kez setproperty komutunu verelim. İlkinde rotasyon değeri olarak 270 yazalım. İkincisinde this._x -30 ifadesini değer alanına yazalım. Bu tuşa başıldığında böcek 270 derece dönecek ve 30 piksel sola hareket edecektir.

Komutların genel görüntüsü şöyle olur:

onClipEvent (enterFrame) {
if (Key.isDown(Key.UP)) {
setProperty (this, _rotation, 0);
setProperty (this, _y, this._y - 30);
} else if (Key.isDown(Key.LEFT)) {
setProperty (this, _rotation, -90);
setProperty (this, _x, this._x -30);
} else if (Key.isDown(Key.RIGHT)) {
setProperty (this, _rotation, 90);
setProperty (this, _x, this._x + 30);
} else if (Key.isDown(Key.DOWN)) {
setProperty (this, _rotation, 180);
setProperty (this, _y, this._y + 30);
}
}

Komutlar karışık görülmesine rağmen son derece basit bir mantığı vardır.

Peki biz sadece 4 yönde değilde oblik hareket etmesini istersek yani 8 ayrı yönde hareket etmesini istersek ne yapmalıyız? Kodlar çok uzayacakta olsa aslında işlem basittir.

Burada birleştirme operatörünü kullanacağız. Bu AND(ve) manasına gelen && işaretidir. Şimdi kodları görelim:

onClipEvent (enterFrame) {
if (Key.isDown(Key.UP) && Key.isDown(Key.RIGHT)) {
setProperty (this, _rotation, 45);
setProperty (this, _y, this._y - 15);
setProperty (this, _x, this._x + 15);
} else if (Key.isDown(Key.DOWN) && Key.isDown(Key.RIGHT)) {
setProperty (this, _rotation, 135);
setProperty (this, _y, this._y + 15);
setProperty (this, _x, this._x + 15);
} else if (Key.isDown(Key.UP) && Key.isDown(Key.LEFT)) {
setProperty (this, _rotation, -45);
setProperty (this, _y, this._y - 15);
setProperty (this, _x, this._x - 15);
} else if (Key.isDown(Key.DOWN) && Key.isDown(Key.LEFT)) {
setProperty (this, _rotation, -135);
setProperty (this, _y, this._y + 15);
setProperty (this, _x, this._x - 15);
} else if (Key.isDown(Key.LEFT)) {
setProperty (this, _rotation, -90);
setProperty (this, _x, this._x -30);
} else if (Key.isDown(Key.RIGHT)) {
setProperty (this, _rotation, 90);
setProperty (this, _x, this._x + 30);
} else if (Key.isDown(Key.DOWN)) {
setProperty (this, _rotation, 180);
setProperty (this, _y, this._y + 30);
} else if (Key.isDown(Key.UP)) {
setProperty (this, _rotation, 0);
setProperty (this, _y, this._y - 30);
}
}


Lütfen kodların bolluğu kafanızı karıştırmasın. Sıra ile inceleyelim.

İlk 5 satıra bakın. Kullanıcı aynı anda üst ve sağ yön tuşuna bastığında (bu ikili tuşa basılmasını denetleyen && komutudur) böcek 45 derece sağa dönecek ve 15 piksel sağ oblik hareketi sağlayacaktır. Yukarı hareket y eksenini 15 piksel azalttığından eksi değeri, x eksenini arttırdığından artı değeri kullanılmıştır. Else if deyimini ekleyerek aynı işlemleri diğer 3 oblik hareket içinde yapın. Geriye kalan sol, sağ, yukarı ve aşağı hareketleri zaten örneğimizde görmüştünüz.

Yukardaki kodları kopyalayarak film klibimize atadığınız komutların olduğu alana yapıştırın. (Önceki kodları sildikten sonra). Üst-sağ yön tuşlarına aynı anda bastğınızda böceğin sağ-üste oblik hareket ettiğini, alt-sağ yön tuşlarına beraberce bastığınızda sağ-alta oblik hareket,sol-alta bastığınızda sol-alta oblik hareket, sol-üst yön tuşuna bastığınızda sol-üste oblik hareket ettiğini göreceksiniz.