Actionscript 3.0 ile Olay ve Olay Dinleyicilerine Giriş
Engin Yöyen Tarih: 14/09/2008 Yorum: 0 adet
Okunma : 548 Tutanlar: Bu yazıyı 5 kişi tuttu.
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;
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.MOUSEDOWN ifadesi hangi tür olayi dinleyeceğimizi belirler. MouseEvent sınıfının MOUSEDOWN 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.
function btnDown (event:MouseEvent) {
//Butona tıklandığında çalışacak olan kod bloğu
trace("Butona tıklandı");
}
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;
my_btn.addEventListener(MouseEvent.MOUSE_DOWN, btnDown);
function btnDown (event:MouseEvent) {
trace(event.target.x);
trace(event.target.y);
trace(event.target.width);
trace(event.target.height);
trace(event.target.alpha);
trace(event.target.scaleX);
trace(event.target.name);
}
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.
this.addEventListener(Event.ENTER_FRAME, run);
var i:uint=0;
function run(e:Event) {
i++;
trace("olay dinleyicisi çalışma sayısı"+i);
if (i==5) {
this.removeEventListener(Event.ENTER_FRAME, run);
}
}
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.
my_btn.addEventListener(MouseEvent.MOUSE_DOWN, btnDown);
function btnDown (event:MouseEvent) {
event.target.x=150;
event.target.y=150;
event.target.width=200;
event.target.alpha=0.5;
}
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 Yöyen!
İçeriğe kayıtlı yorum bulunmuyor. İlk yorumu siz buradan ekleyebilirsiniz.
Makale
Ders
Etkinlikler
Toplantı
Kahraman ve need4code.com Projesi Connect Toplantısı
Kahraman ve need4code.com Projesi Connect Toplantısı
Selam arkadaslar,
Programlama ile uğraşanların hayatlarını kolaylaştıracak desktop ve web tabanlı ortak iki proje ile ilgili 3. toplantımızı 3Aralık...
Kategori:
Toplantı
Kimler Burada? 
Son 1 dakika içinde MMIstanbul' da 401 (3 kayıtlı, 398 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:
MMIstanbul Blog'undan
Neler Yapılabilir?
Yeni bir portal, 30 civarında online / offline etkinlik, seminer vb rağmen MMIstanbul sanıyoruz ki halen hakettiği ilgiyi göremedi. " ...
500 Hatası Hakkında!
Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)
Ne Nedir Kampanyası Başlıyor!
Çok Merak Edenler için; MMIstanbul Geliştirme Ekibi ve Çalışma Ortamımız








