Plazma sayı 5, sayfa 59
Sayfanın metni

Sayfa 59

"Usta... ActionScript 3.0 üzerine pişmişinden OOP kes, az da MVC döküver..."

Property

AS3 öncesi property dediğimiz objelere ait değerlere erişim için

myClip mc. alpha 50;

şeklinde önünde işaretli bir yaklaşım uyguluyorduk. AS3 ile hem bu öndeki işareti kalkıyor, hem de 0-100 arası değerler artık 0...1 aralığında olacak şekilde veriliyor. AS2'ye kadar yüzde şeklinde cinsinden değer belirtmek, player'ın ilgili property değeri üzerinde çarpma ve sonra 100'e bölme işlemi yapmasını, dolayısıyla da hızın azalmasına sebep oluyordu.

Event

AS3 öncesi bir movieclip'in mouse ile etkileşimini sağlamak çok pratik idi; ilgili movieclip'in koduna şu türden bir kod eklemekle Flash'ın Button tanımlaması da tarih olmaya başlamıştı:

on

doSomething(); )

AS2 ile bu yöntem, timeline'da yazılabilecek şu şekilde bir kodla da sağlanabiliyordu:

myButton.onRelease function() 1

doSomething(); )

Ama artık AS3 ile her şey kurallara çok uygun olmak durumunda. Objeler arası etkileşim, bunların birbirini dinlemesi ve buna uygun tepki göstermesiyle olabilir. Bu yüzden listener (dinleyici) oluşturup istediğimiz durum gerçekleştiğinde bir işleyiş oluşturabiliriz.

function ClickHandlerFunction(event)

1 J

myButton.addEventListener( MouseEvent.CLICK, ClickHandlerFunction);

doSomething();

Aslında yaptığımız, klasik bir fonksiyon tanımlamasında parametre olarak bir event objesi getirecek şekilde dönüştürerek bunu bir dinleyiciye bağlamak. MouseEvent.CLICK, dinlenecek durum tipini tanımlanmasını sağlıyor. Fonksiyonda kullanmayacak olsanız bile parametre olarak event objesini belirtmeniz gerekiyor, yoksa durum gerçekleştiğinde parametresiz tanımlanmış fonksiyona parametre geçmeye çalıştığınız için hata verecektir. event objesini incelediğinizde bunun, durumu gerçekleştiren objeye refere eden bir obje olduğunu görürsünüz. Farklı durumları tek bir fonksiyon ile algılamak istediğinizde bu event objesini kontrol ederek öğrenebilirsiniz.

Inheritance

Gerçek bir OOP, class'ların birbirinden türetilebildiği bir kalıtım sistemini de barındırır. Kendisini oluşturan class'a ait metod ve property'lerin devralınmasına inheritance (kalıtım) denmektedir. Bu yaklaşım, var olan çeşitli class'ları kendi metodlarımızla geliştirmemizi sağlıyor. Önceden prototype ifadesi ile Array, Math, MovieClip gibi çok kullanılan class'lara ek fonksiyonlar tanımlıyorduk. AS3 artık prototype yaklaşımı yerine class inheritance kullandığından prototype genişletme yönteminin pabucu dama atıldı.

public class Circle extends MovieClip

şeklinde bir class tanımlaması, MovieClip class'ını genişleterek ona Circle isimli bir metod ekleyecektir. Aşağıdaki örnekte Circle metodu, MovieClip class'ına yeni bir fonksiyon olan daire çizmeyi ekliyor. radius ve fillColor, dışarıdan erişilebilen property'ler ve fonksiyon, bunları parametre olarak alarak daireyi MovieClip class'ının drawCircle() metodu ile çiziyor.

package ( import flash.display.MovieClip; public class Circle extends MovieClip

(

10;

public var radius public var fillColor public function drawTheCircle() ( this.graphics.clear(); this.graphies.beginFill1(fillColor); 0,

,

Timeline'da kullanılacağı zaman

import Circle; var myCircle myCircle.radius myCirele.fillColor 0x0000FF; myCircle.drawTheCircle();

new Circle(); 20;

yazmak yeterli olacaktır.

Static

Class'ın her yeni kullanımında değişmeyecek değerleri ve metodları Static kelimesi ile tanımlayabiliriz. Bu şekilde statik öge, class'dan oluşturulan her çocuk objede ayrı ayrı tutulmaz, tek değer/metod tüm o class'ın çocukları için geçerli olur. Bir obje yaratıldığında, class'da Static olmayan tüm property ve metotlar, her çocuk objeye kopyalanır. Ama Static tanımlanan property ve metotlar, sadece class'a ait olurlar, onun çocuklarına aktarılmazlar.

Statik ögeleri, bir class'dan kaç defa türetildiğini kontrol etmek için kullanabilirsiniz. Buna örnek olarak bir slideshow indeksini verebilirim. İleri ve geriye gidildiğinde kaçıncı resimde olduğumuz ve başa / sona ulaşıp ulaşmadığımızı, bu değerleri statik yaparak kontrol edebiliriz.

radius);

Klavyeyle gezinmek için ← ve → tuşları.