Actionscript 3.0 ile Olay ve Olay Dinleyicilerine Giriş

31 Temmuz 2008 – 17:33

Actionscript 3.0 ile beraber olay ve olay sınıfları tamamen değişti. Bunun geliştiricilere birçok faydası oldu. Ana mantık ise kullanılan objeler üzerinde hâkimiyetin daha iyi sağlanması. Yazdığınız kodlardaki objelerde hakimiyetiniz ne kadar yüksek ise çıkacak hata sayısı o kadar az olacaktır. Ayrıca bunun diğer bir faydası da yazılan kodun tamamlandıktan sonra, tekrar kod ilave etmeye kalktığınızda size kolaylık sağlamasıdır. Bunu şöyle düşünün; Actionscript 3.0 ile bir proje yaptınız, proje tamamlandı. 3 Ay sonra projeyi teslim ettiğiniz kurum veya kişi yapılan uygulamaya ilaveler istedi. Buradaki temel sorun yapılan yapıyı bozmadan üzerine yeni yapılar eklemek. Genel de zordur, her halükarda kodların çoğunun değişmesi lazımdır. İşte burada sizin yazdığınızı objeler üzerinde hâkimiyetiniz devreye giriyor. Eğer hâkimiyetiniz yüksek ise ilaveler kolaylaşıyor, değilse mutlaka ki zorlanacaksınız. Hakimiyet için ise kesinlikle olayları iyi bir şekilde kullanmanız gerekir.

Olay Nedir?
Olay; bir objenin diğer objelere belli bir hareket sonucu haber göndermesidir. Buna verilecek en basit örnek bir butona tıklandığında gerçekleşen işlemlerdir. Ama bunu sadece movie clipler veya butonlar için geçerli değil, bu bir animasyonun bitmesi olabilir, animasyonun başlangıcı olabilir, bir resmin yüklenmesi ile ilgili bilgi olabilir, ya da sunucu tarafından gönderilen bir bilgi olabilir. Gerçekleşen her hareket bir olayın başlangıcı veya bitişidir.

Olay Dinleyicileri?
Olay dinleyicileri(Event Listener) ise gerçekleşen değişim ve hareketleri takip eder ya da objelerdeki değişiklikleri dinler. Yani animasyon başladığını, bittiğini, bir butona tıklanıp tıklanmadığını, sunucudan bilgi gelip gelmediğini olay dinleyicileri ile dinlersiniz. Olay dinleyicilileri belirlenen değişiklik gerçekleştiğinde, bu değişiklikleri belirlenen kodların çalışması ya da başka olayların tetiklenmesi için kullanılır.

Temel Olarak Olay Dinleyicisi Oluşturmak
Yeni bir olay dinleyicisini oluşturmak zor değildir. İki adımdan oluşur, biri hareketlerini dinleyeceğiniz objeye olay dinleyicisini eklemek, ikincisi ise olay gerçekleştiğinde çalışacak olan fonksiyonu hazırlamak. Bunun için basit bir şekilde bir butona olay dinleyicisi ekleyelim. Butona tıklandığında fonksiyonumuz devreye girsin. Sahneye bir botun ekleyip instance name olarak “my_btn” değerini verin. Daha sonra action panelini açarak kod yazmaya başlayabilirsiniz. İlk olarak olay dinleyicimizi ekliyoruz;

  1. my_btn.addEventListener(MouseEvent.MOUSE_DOWN, btnDown);

Objenin adından sonra addEventListener ifadesini yazıyoruz. Aslında bu da bir metotdur. Daha sonra parantez içerisinde olay dinleyicisine göndereceğimiz parametreleri ekliyoruz. Olay dinleyicileri temelde 5 adet parametre alır, bunların ilk ikisi zorunlu, diğerleri opsiyoneldir. İlk paremetre yani MouseEvent.MOUSE_DOWN ifadesi hangi tür olayi dinleyeceğimizi belirler. MouseEvent sınıfının MOUSE_DOWN olayını dinliyoruz. Buradaki olay türü yapılacak işe göre değişiklik gösterir. Eğer bir timer objesini dinleyecek olasaydık alacağı değer şu şekilde olurdur TimerEvent.TIMER.
İkinci parametre ise olay gerçekleştiğinde çalışacak olan fonksiyonun ismidir.

Şimdi olay gerçekleştiğinde çalışacak olan fonksiyonu geçelim. Gördüğünüz gibi fonksiyon event adlı bir parametre kabul ediyor. Ve bu parametrenin türü MouseEvent.

  1. function btnDown (event:MouseEvent) {
  2. //Butona tıklandığında çalışacak olan kod bloğu
  3. trace("Butona tıklandı");
  4. }

Bu ne anlama geliyor? Butona tıkandığında olay dinleyicisi yeni bir olayı devreye sokuyor ve olayın gerçekleştiği objeye ait bazı bilgileri alıp fonksiyonu yolluyor. Bu bilgiler boşa düşemeyeceği için bir parametre yaratıyoruz ve bu bilgileri alıyoruz. Fonksiyon içerisinde ise istediğiniz şekilde kod yazabilirsiniz. Ama fonksiyona gelen parametre gönderilen olay türü ile kesinlikle aynı olmalıdır.

Parametreler ve Kullanımı
Fonksiyona gelen parametreler sadece olayın yapıldığı bilgisini değil aynı zamanda olayı gerçekleştiren objeye ait bilgileri de taşıyor. Mesela objenin bütün özelliklerine ulaşabilirsiniz. Yani sahnede bir botuna tıklandığında o butonun x ve y koordinatlarını, adını, alpha değerini, genişlik ve yüksekliğini, ve ya buna benzer bir çok bilgiyi alabilirsiniz. Yukarıdaki kodu şu şekilde düzenliyoruz;

  1. my_btn.addEventListener(MouseEvent.MOUSE_DOWN, btnDown);
  2. function btnDown (event:MouseEvent) {
  3. trace(event.target.x);
  4. trace(event.target.y);
  5. trace(event.target.width);
  6. trace(event.target.height);
  7. trace(event.target.alpha);
  8. trace(event.target.scaleX);
  9. trace(event.target.name);
  10. }

Açıklamasına gelirsek, aslında yukarda açıklanacak tek şey target ifadesi. target olayın gerçekleştiği objeyi, yani hedef objeyi bize veriyor. Event ifadesi ise zaten fonksiyona gelen parametre. Geri kalanlar ise bildiğiniz görüntü objelerinin özellikleri. Gördüğünüz gibi hiç çaba sarf etmeden bu bilgilere ulaştık.

Aklınızdan şu şekilde bir soru geçebilir? Ben bu objenin ismini biliyorum, olay sınıfı olmadan da bu bilgileri alabilirim, ne işime yarar ki?

Sorunun cevabını gelirsek; Bir movie clibin içinde 10 tane buton olduğunu düşünün, ne yapardınız? 10 butona ayrı ayrı olay dinleyicisi mi eklerdiniz? Daha kolay bir yolu var, 10 butonun olduğu movie clibe bir olay dinleyici ekler ve bütün butonların ismine ve bilgilerine bu şekilde ulaşabilirisiniz.

Olay Dinleyicilerini Kaldırma
Bazen olay dinleyicilerin artık belirli bir olayı dinlemesini istemeyebilirsiniz. Bu gibi durumlarda olay dinleyicisini kaldırmak için removeEventListener metodunu kullanabilirsiniz. Bunu denemek için ENTER_FRAME olayını dinliyoruz, ilk olarak bir olay dinleyicisini ekliyoruz, daha sonra olay dinleyici her çalıştığında çalışma sayısını tutacak bir değişken oluşturuyoruz. Eğer olay dinleyicisi 5 sefer çalışırsa removeEventListener metodunu kullanarak olay dinleyicisini kaldırıyoruz.

  1. this.addEventListener(Event.ENTER_FRAME, run);
  2.  
  3. var i:uint=0;
  4. function run(e:Event) {
  5. i++;
  6. trace("olay dinleyicisi çalışma sayısı"+i);
  7. if (i==5) {
  8. this.removeEventListener(Event.ENTER_FRAME, run);
  9. }
  10. }

Olay Dinleyicileri İle Objeleri Kontrol Etmek
Olay dinleyicileri olayı gerçekleştiren objelerin bilgilerini alabiliyor demiştik. Eğer bir objenin bilgisine ulaşabiliyorsak, bu bilgiyi aynı yolla değiştirmemizde mümkündür.

  1. my_btn.addEventListener(MouseEvent.MOUSE_DOWN, btnDown);
  2. function btnDown (event:MouseEvent) {
  3. event.target.x=150;
  4. event.target.y=150;
  5. event.target.width=200;
  6. event.target.alpha=0.5;
  7. }

Gördüğünüz gibi aynı yolu kullanarak objeye ait bilgileri istediğimi gibi düzenleyebiliriz.

Kapanış
Evet olay dinleyicilerinin temel olarak bu şekilde çalışırlar. Tabii bu olay sınıfının çok küçük bir parçası. Yani başlangıç seviyesi, OOP ile uğraşıyorsanız kesinlikle Olay sınıflarını iyi bir şekilde öğrenmeniz gereklidir.

Kolay Gelsin
Engin!

Bu makale ile ilgili olabilecek yazılar


  1. 4 Responses to “Actionscript 3.0 ile Olay ve Olay Dinleyicilerine Giriş”

  2. uzun zamandan sonra güzel bir makale..
    merak ettiğim birşeyler daha öğrendim…
    kitap noldu bu arada bir ay daha beklemeyiz umarım :)

    By emrah atılkan on Ağu 1, 2008

  3. Merhaba Emrah,
    öncelikle teşekkürler. Kitap için bir ay daha beklemiycez :)

    By Engin Yöyen on Ağu 1, 2008

  4. Engin az önce pusulayı arayıp konuştum ve kitap için ağustos sonu - eylül diyorlar. okullar kapalı falan dedi adam sezon falan anlamadım ben bu işi ya. :(

    By Burak Donertas on Ağu 1, 2008

  5. Merhaba Burak,
    valla ne desem yalan olur. Ama Hakan Arıcıda iki gün önce aramıştı, onun maili üzerine ben de görüştüm, ama planda bir değişilik olmadığını söylediler.Tarih konusu biraz çalkantılı bir konu. Ama kısa bir süre sonra birşeylerin ucu görünmeye başlar artık.
    Sağol Burak
    Kolay Gelsin

    By Engin Yöyen on Ağu 1, 2008

Yorum Ekleyin