Olay Dinleyicileri(Event Listener) Mantığı Hakkında
Olay dinleyicisi statik olarak tanımlanmış bir fonksiyona benzer. Ya da öyledir.. trace() ya da gotoAndStop(15) gibi fonksiyonlardan farkı yoktur. Yazım şekli addEventListener() biçimindedir.
gotoAndStop() fonksiyonu döndürmek için değişken olarak integer bir değeri kabul ediyor. (15) gibi.. Olay dinleyicisi fonksiyonunun beklediği ve sık kullandığımız iki değer olayın türü ve çalıştırılacak fonksiyondur.
Biz bu makalede fare olaylarını değerlendireceğiz. Diğer olaylarda yapı olarak benzer şekildedirler. Mantık bir olay bekleme, gerçekleştiğinde ise bizim istediğimiz fonksiyonu çalıştırma, bu fonksiyonada yardımcı bilgileri iletme şeklinde gerçekleşir.
Uygulama Önizlemesi:
Olayların türü string değer olarak alınır. addEventListener(“click”) ya da addEventListener(MouseEvent.CLICK) şeklinde değer gönderebilirsiniz. İkinci şekilde gönderim muhtemelen bir sınıf ya da string değerleden oluşan ağaç yapılı objeyi çağırıyor olabilir. Ancak sonuç olarak değeri “click” ‘tir. Türü string’tir.
Birkaçı şöyledir:
“mouseOver” - Üzerine gelince (Fare, görev eklenmiş objenin alanına girince)
“mouseDown” - Fareye baskı uygulandığında
“mouseUp” - Uygulanan baskı son bularak kullanıcı fareden elini çekince
“mouseOut” - Üzerinden çekince (Fare, görev eklenmiş objenin alanından dışarı çıkınca)
ve “click” - Tıklatınca (Bastırılıp bırakılma olayı)
İkinci değer iste function() ‘dur. Şu şekilde yollayabilirsiniz. addEventListener(“click”,testf);
Böylece addEventListener fonksiyonuna “click” şeklinde bir string, ve testf şeklindede bir fonksiyon gönremiş olduk.
Fonksiyonuda tanımlamış olmamız gerekiyor.
function testf (e:Event) {
trace(e.target.name)
}
Bu fonksiyonu kendimiz tanımlıyoruz ancak görüldüğü gibi bir değişken beklemesi gerektiğini belirtiyoruz. e:Event yazdığımız zaman bütün olay türlerinde herhangi bir olayı yeni oluşturduğumuz e değişkenine getir demiş oluyoruz.
Burada “e” yerine istediğiniz terimi kullanabilirsiniz. gelecekOlayBilgileri gibi. Ancak değişken türü Event için o kadar özgür değiliz. Değişken olarak MouseEvent türünü ya da Object türünü kullanabilirsiniz. function testf( gelecekOlayBilgileri:MouseEvent )
Mantığa gelelim. addEventListener(“click” , testf) derken movieclip yada kullanıyorsanız buton sınıfının içerisinde bulunan addEventListener fonksiyonuna iki değer göndermiş oluyoruz. addEventListener fonksiyonu ise kendine gönderilmiş olan testf fonksiyonunu kaydediyor. Gerektiği zaman yani tıklama gerçekleştiği zaman fonksiyonu çalıştırıyor. Ancak çalıştırmakla kalmayıp olay bilgilerini bu fonksiyona yani testf fonksiyonuna gönderiyor. Geri gönderdiği değerleri fonksiyon içinde kullanabiliyoruz. Bu değerlere örnek olarak, olay türü ya da görevlendirilmiş objenin ismi verilebilir.
Bu aşamadan sonra örneğin fonksiyon içinde kullanacağımız gelecekOlayBilgileri.target.name film klibinin adını taşımaya başlıyor. type değeri “click” olarak belirleniyor. Burada target hedef,name ise hedefin ismi olarak kullanılıyor.
Bir örnekle addEventListener fonksiyonunu kavramaya çalışalım.
Örneğimiz bir film klibinin buton gibi davranmasını, üzerine gelme ve üzerinden çekme gibi olaylara tepki vermesini sağlamak üzerine bir uygulama olsun.
Sahnede bilgi_txt durum adı’na(insance name) sahip bir dinamik(dynamic) metin kutu’muz(text box), bir de as3coder_mc durum adına sahip film klibimiz(MovieClip) olmalı.
/* as3coder_mc adlı film kilibi'nin(MovieClip) fare üzerine gelince el işareti çıkmasını sağlayalım */ as3coder_mc.buttonMode=true; /* as3coder_mc'nin üzerine gelinmesi olayını bekleyen bir görev ekleyelim. Bu fonksiyondan da olay gerçekleştiğinde faref adlı fonksiyonu çalıştırmsını isteyelim. */ as3coder_mc.addEventListener("mouseOver",faref); // aynı şekilde üzerinden çekince as3coder_mc.addEventListener("mouseOut",faref); // aynı şekilde fareye baskı uygulanınca as3coder_mc.addEventListener("mouseDown",faref); // aynı şekilde fareye uygulanan baskı sonlanınca(kullanıcı elini // çekince) as3coder_mc.addEventListener("mouseUp",faref); /* addEventListener fonksiyonuna eklediğimiz bütün bu olaylar gerçekleştiğinde şimdi yazacağımız fonksiyon çalışacak. addEventListener fonksiyonu bu fonksiyonu çalıştırırken faref fonksiyonuna değerler gönderecek. Bu değerlerin de gelecekOlayBilgisi:Event şeklinde oluşturduğumuz değişkene gelmesini sağlayalım. */ function faref(gelecekOlayBilgisi:Event) { /* Eğer gelecekOlayBilgisi değişkeninin type elemanı yani olay türü, mouseOver yani üzerine gelince ise, gelecekOlayBilgisi değişkeninin target elemanının yani hedef objenin alpha özelliğini 0.8 olarak değiştir. */ if (gelecekOlayBilgisi.type=="mouseOver") { gelecekOlayBilgisi.target.alpha=.8; bilgi_txt.text="Fare üzerimde"; // diğerlerini açıklamayacağım // fare düğme sınırlarından çıkınca } else if (gelecekOlayBilgisi.type=="mouseOut") { gelecekOlayBilgisi.target.alpha=1; bilgi_txt.text="Fare üzerimden ayrıldı"; // fareye baskı uygulanınca } else if (gelecekOlayBilgisi.type=="mouseDown") { gelecekOlayBilgisi.target.alpha=.6; bilgi_txt.text="Baskı uygulandı"; // fareye uygulanan baskı sonlanınca } else if (gelecekOlayBilgisi.type=="mouseUp") { gelecekOlayBilgisi.target.alpha=.8; bilgi_txt.text="Baskı sonlandırıldı"; // navigateToURL(new URLRequest("http://as3coder.com"),"_blank"); } }
Not: Burada target bilgisi, görev eklenmiş film klibi içerisindeki film kliplerini temsil ediyor. Eğer içerideki film klipleri değilde en dışarıdaki film klibinin hedef bilgisini almak istiyorsanız film klibinin currentTarget özelliğini kullanmalısınız. Örnek: gelecekOlayBilgisi.currentTarget.alpha=.8; Bu konuda ayrıntılı bilgiyi, gelecek olan “Daha az Kod Yazarak Yüksek Sayıdaki Film Kliplerini Görevlendirmek” adlı makalede detaylı şekilde bulabileceksiniz.
Uyglama Dosyaları: http://as3coder.com/dosyalar/olayDinleyicileri.rar
_____________________________________________
Yorumlarınızda sorularınızı çekinmeden sorunuz. Her güncelleme google puanı demek (:
Burak AYDIN - www.mehmetoglu.org

Aralık 7th, 2009 at 14:16
Bir de onReleaseOutSide’i anlatmak lazim
Aralık 7th, 2009 at 14:42
ehehe (: tm bir uygulamada ona da değinelim..
umarım beğenmişlerdir..
Ocak 16th, 2010 at 19:03
tesekkürler
Şubat 20th, 2010 at 21:15
birşey değil (:
Ağustos 29th, 2010 at 01:44
güzel örnekler fakat heryerde bunlar var zaten. as3 de bilinmeyen, işe yarayan olay dinleyicilerinden bahsedilse birazda. İleri düzey bilgiler vermekten niye bu kadar çekiniyor as3-flash’cılar.