Actionscript 3.0 'da Event İletişimleri
Yazar : E.Altuğ YILMAZ
Merhaba arkadaşlar ;
Flash tasarımlarımızda her zaman ihtiyacımız olan herhangi bir işlemi bir eventa bağlı olarak mesela bir düğmeye tıklandıkça dinamik textin scroll olması veya üzerinde durdukça açılan bir popup menü gibi işlemler çok ihtiyacımız olacak bir Event etkileşimleridir. Actionscript 2.0 'da Eventlarla tanışmadan evvel istediğimiz fonksiyonu istenen eventla enEnterFrame'e bir fonksiyon olarak bağlayarak bunu aşağıdaki gibi halledebiliyor, diğer event ile de delete onEnterFrame gibi anlamsız bir ifadeyle de eventı kaldırabiliyorduk. Direk MovieClipin üzerine :
on (press) {
onEnterFrame = function () {
trace("baslıyooo")
}
}
on (release, releaseOutside) {
delete onEnterFrame;
}
Veya frame movieklipe bir isim vererek :
dugme1_btn.onPress = function ()
{
onEnterFrame = function () {
trace("baslıyooo")
}
}
Ancak 3.0 da daha fazla kod yazıyor gibi gözüksekte hem mantık hemde anlatım açısından daha mantıklı bir event iletişimi var.
dugme1_btn.addEventListener(MouseEvent.MOUSE_OVER,geldi);
function geldi(e:MouseEvent) {
stage.addEventListener(Event.ENTER_FRAME,oyna);
//Öncelikle dugme1_btn düğmesinin üzerine gelindiğinde devamlı çalışması için stage'e ENTERFRAME olarak çalışacak fonksiyonumuzu ekliyoruz
dugme1_btn.removeEventListener(MouseEvent.MOUSE_OVER,geldi);
//Birdaha geldiğinde çalışmaması içinde dugme1'in MOUSE_OVER eventını remove ediyoruz.
}
function oyna(e:Event) {
dugme1_btn.nextFrame();
//Burada play yerine nextFrame kullanmamın nedeni eğer animasyonun ortasında geri çekilirse mouse kaldığı yerden prevFrame ile de döndürebilmek.
}
dugme1_btn.addEventListener(MouseEvent.MOUSE_OUT,gitti);
function gitti(e:MouseEvent) {
stage.removeEventListener(Event.ENTER_FRAME,oyna);
//Mouse dugmenin üzerinden kaçtıgında MOUSE_OVER ile eklenen oyna fonksiyonunu kaldırıp geri oyna fonksiyonunu stage'e devamlı çalışacak şekilde ekliyorum.
stage.addEventListener(Event.ENTER_FRAME,gerioyna);
}
function gerioyna(e:Event) {
dugme1_btn.prevFrame();
// Buraya kadar da kodlarınız çalışacaktır.Ancak düğmenin içindeki açılma animasyonu gittiği kadar frame'den geri 1.ci frame'e prevFrame ile gelmesiyle stage'deki event kalkmıyor buda çoklu sayıda eventın devamlı sahnede çalışmasını ve dolayısıyla performasn sorunlarına yol açabilir,düğme animasyonunun frame'i 1 oldugunda da stage'deki geri oynayan eventı remove ediyoruz ve birdaha geldiğinde çalışsın diye MOUSE_OVER evetını geriye dönüş tamamlandığında ekliyoruz.
if (dugme1_btn.currentFrame == 1) {
stage.removeEventListener(Event.ENTER_FRAME,gerioyna);
dugme1_btn.addEventListener(MouseEvent.MOUSE_OVER,geldi);
}
}
Çalışmanın FLA dosyası : http://expression.web.tr/al2y/event2.fla
Bu 3.0 ile geliştirdiğim bir projede lazım olmuştu kendi çözümümdür mutlaka daha pratik olanı da vardır öyle bir yol bulanlar paylaşırlarsa sevinirim.
Faydalı olması dileğiyle....