28 Mayıs 2013 Salı

events

1
1. Olaylarla ilgili Temel Kavramlar
Event (olay), bir programda bir şeyler gerçekleştiğinde oluşur. Bir fare tıklaması, bir videonun yüklenmesi veya bir metin alanında yapılan değişiklik birer olaydır. ActionScript 3.0, bu tür olaylar gerçekleştiğinde hangi işlevlerin yerine getirileceğine de karar verir. Örneğin bir butona tıklandığında, ekrana uyarı yazdıran bir kod parçasının çalışması istenebilir. Actionscript 3.0’da “olay”larla ilgi olarak aşağıdaki kavramların bilinmesi gerekir:
 Olay türü (event type)
 Alay adı (event name)
 Olay dinleyicileri (event listeners)
 Olay dağıtımı (event dispatch)
 Olay nesnesi (event object)
 Olay hedefi (event target)
ActionScript 3.0’daki olay türlerine örnek olarak aşağıdakiler verilebilir:
 MouseEvent: Fare olayları
 KeyboardEvent: Klavye olayları
 TimerEvent: Zamanlama olayları
 SoundEvent: Sesle ilgili olaylar
 TextEvent: Metin alanı ile ilgili olaylar
 ActivityEvent: Kamera ve mikrofonun aktif ve pasif olmasıyla ilgi olaylar
 ContextMenuEvent: Context Menu ile ilgili olayalar
 DataEvent: Veri iletimi ile ilgili olaylar.
 System events: Sistemin otomatik olarak tetiklediği olaylar, hata mesajları vs…
Olayların tümü events sınıfından türetilmektedir.
ActionScript'de her türlü olay String bir adla gösterilir. Örneğin fareye tıklama olayının adı (event name) "CLICK"tir. Klavyeden bir tuşa basma olayının adı “KEY_DOWN”dır.
ActionScript, olayları gerçekleştirmek için olay dinleyicileri (event listeners) kullanır (olay işleyici de denmektedir). Bir olay dinleyici, belirtilen olay meydana geldiğinde istenen fonksiyonu çağırır.
Olay dinleyicilerini çalıştırma işlemine olay dağıtımı (event dispatch) denir. Olay dinleyiciler EventDispatcher sınıfının bir örneğidir. EventDispatcher sınıfı olay dinleyicileri eklememek için addEventListener() kaldırmak removeEventListener () metotlarını kullanır.
Bir olay dağıtımı başladığında ActionScript, olayları gösteren olay nesnesi (event object) oluşturur. Olay nesnesi, her zaman Event sınıfının bir örneği veya bu sınıftan türeyen bir
2
nesnedir. Her olay dinleyici, olay nesnelerinin değişkenlerini, olayla ilgili bilgilere ulaşmak için kullanabilir.
Her bir olay dağıtımı bir olay hedefine (event target) sahiptir. Olay hedefi, olayın hangi nesneye ait olduğunu belirtir. Örneğin farenin tıklandığı buton nesnesi hedef nesnedir. Tüm olay hedef nesneleri EventDispatcher sınıfının bir örneğidir.
Events (olaylar) sınıfının alt sınıflarını aşağıdaki bağlantıdan öğrenebilirsiniz:
http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/events/package-detail.html
Fare Olayları
ActionScript 3.0'da 10 tane fare olayı bulunmaktadır.
CLICK: Tıklama olayı
DOUBLE_CLICK: Çift tıklama olayı (Bu olay için objenin doubleClickEnabled özelliğinin true olması gerekmektedir.)
MOUSE_DOWN: Farenin sol tuşuna basılı tutma olayı
MOUSE_MOVE: Farenin hareket etmesi
MOUSE_OUT: Farenin objenin üzerinden çıkması olayı
MOUSE_OVER: Farenin objenin üzerinde olması
MOUSE_UP: Fareye basılı tutup bırakma olayı
MOUSE_WHEEL: Fare tekerleği ile gerçekleşen olaylar
ROLL_OUT: Farenin butonun üzerinden çıkması olayı
ROLL_OVER: Farenin butonun üzerinde olması
ÖRNEK: mc1 nesnesini tıklayınca büyümesi
mc1.addEventListener(MouseEvent.CLICK, buyut);
function buyut(e:MouseEvent):void
{
mc1.scaleX = 1.5;
mc1.scaleY = 1.5;
}
Klavye Olayları
ActionScript 3.0'da 2 temel klavye olayı bulunmaktadır.
KEY_DOWN: Tuşa basma olayı
3
KEY_UP: Tuşu bırakma olayı
ÖRNEK
import flash.events.KeyboardEvent;
stage.addEventListener(KeyboardEvent.KEY_DOWN,sagaGit);
function sagaGit(a:KeyboardEvent):void
{
trace(a.keyCode);
if (a.keyCode == 39)
{
mc1.x += 10;
}
else if (a.keyCode==37)
{
mc1.x -= 10;
}
else if (a.keyCode==38)
{
mc1.y -= 10;
}
else if (a.keyCode==40)
{
mc1.y += 10;
}
}
stage.addEventListener(KeyboardEvent.KEY_DOWN,yuksel);
stage.addEventListener(KeyboardEvent.KEY_UP, alcal);
function yuksel(b:KeyboardEvent):void
{
if (b.keyCode == 65)
{
mc1.y -= 100;
}
}
function alcal(c:KeyboardEvent):void
{
if (c.keyCode == 65)
{
mc1.y += 100;
}
}
4
2. Olay Dinleyicileri (Event Listeners)
Bir nesneye (olay nesnesi) olay dinleyici eklemek için aşağıdaki yazım kuralı kullanılır:
olayNesnesi.addEventListener(Olayın_Türü.Olayın_Adı, fonksiyonAdı)
Örneğin:
buton.addEventListener(MouseEvent.CLICK, kareAl);
ActionScript'de bir olaya cevap vermek için ilk önce Olay türü (event type) ve ismine (event name) karar verilmelidir. Daha sonra ilgili nesneye olay dinleyici (EventListener) eklenmelidir. Örneğin
MouseEvent.CLICK
Event.COMPLETE
Tüm olay dinleyicileri, "void" dönüş tipine sahiptir.
Bir olay dinleyici aşağıdaki parametreleri alır:
addEventListener (type, listener,useCapture,priority,useWeakReference)
Fonksiyon tanımı ve parametleri:
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
type: olay türü
listener: tetiklenecek fonksiyon
useCapture: (yakala) DOM ağaç yapısında olaylar, kökten (document nesnesinden) hedef elemente doğru sevk edilir ve tekrar document nesnesine geri döner. Bu sevk işlemi sırasında olayın gerçekleştiği elemente ulaşana kadar geçen bütün elementlerde, ilgili olay için bir olay dinleyicisi mevcutsa bu elementlere de olayın gerçekleştiği bildirilir.Yakala seçeneği burada olayın hedef elemente giderken mi yoksa document nesnesine dönerken mi yakalanacağını belirler. true hedefe giderken, false ise dönerken yakalanacağını belirtir.*/
priority: (Çalışma önceliği). "priority" parametresi integer değer almaktadır. Bu değer ne kadar büyükse öncelikte o kadar fazladır. Örneğin "priority" parametresi 1 olan olay dinleyici, "priority" parametresi 0 olan olay dinleyiciden daha önceliklidir.
5
useWeakReference: (Zayıf referans kullan) useWeakReference parametresi false ise yani true olarak ayarlı değilse olay dinleyicileri otomatik olarak bellekten kaldırılmaz
3. Hedef Nesneye (Target Object) Erişme
Hedef nesneye erişim, olay dinleyici eklediğiniz nesnenin özelliklerine erişmek için kullanılır.
Her olay dağıtımı sırasında olay nesnesi, olay dinleyicinin "target" özelliği ile hedef nesneye ulaşımını sağlar.
Şu örneği inceleyelim;
function tikla(e:MouseEvent):void
{
(e.target).alpha=0.2;
trace(e.target); // [object SimpleButton]
}
btn.addEventListener(MouseEvent.CLICK, tikla)
Örnekte, (e.target).alpha=0.2 satırında (e.target) tıklanan butonu gösterirken "btn" adlı butonun yerine kullanılmıştır. trace(e.target) satırında ise hedef nesnenin SimpleButton nesnesi olduğu gösterilmektedir.
Olay Dinleyiciye Kayıtlı Nesneye Erişim
Eğer bir nesne veya sembol aşağıda gösterildiği gibi içiçe nesne veya sembollerden oluşuyorsa target ifadesinin yanı sıra"currentTarget" özelliği de kullanılır.
Eğer bir nesne veya sembol aşağıda gösterildiği gibi içiçe nesne veya sembollerden oluşuyorsa target ifadesinin yanı sıra currentTarget özelliği de kullanılır. Aşağıdaki örnekte instance name'i mc olan sembolün (nesnenin) içinde instance name'i btn olan buton ve instance name'i mc2 MovieClip bulumaktadır. Anlaşılır olması için sembollererin kütüphanedeki isimleri ile durum adları (instance name) aynı olarak verilmşitir.
6
Aşağıdaki kodi ile mc sembolüne (nesnesine) tikla olay dinleyicisi eklenir.
7
mc'ye tıklandığında target özelliği btn veya mc2'ye tıklandığında currentTarget özelliği çalışır.
mc’ye tıklandığında output ekranında
// mc // mc
Mc2’ye tıklandığında output ekranında
// mc // mc2
btn’ye tıklandığında output ekranında
// mc // btn
görünütülenir.
8
Varsayılan Olay Davranışını (Default Event Behaviour) Engellemek
Bir SimpleButonuna basıldığında, varsayılan olarak butonun "down" durumundaki grafik durumu görünür. INPUT özelliğine sahip TextField nesnesine metin girildiğinde klavyeden basılan karakter ekranda varsayılan olarak görülür. Bazen programcı bu nesnelerin kendilerine ait varsayılan davranışlarını göstermesini istemez. Bunun için de olayın kaydedildiği olay dinleyicisinde, Event sınıfından preventDefault() metoduna ihtiyaç vardır.
Aşağıdaki "GorunmezYazi.as" dosyasında da bir TextField alanına, klavyeden girilen karakterlerin ekranda görünmesi engellenerek yazılan her karakter için ekrana "o" karakterini basması istenmektedir.
package
{
import flash.display.*;
import flash.text.*;
import flash.events.*;
public class GorunmezYazi extends Sprite
{
private var yazi:TextField;
public function GorunmezYazi( )
{
yazi = new TextField( );
yazi.border = true;
yazi.type = TextFieldType.INPUT;
addChild(yazi);
//TextField nesnesi oluşturuldu ve ekrana taşındı
yazi.addEventListener(TextEvent.TEXT_INPUT, yaziListener);
}
private function yaziListener(e:TextEvent):void
//TextEvent.TEXT_INPUT olayı gerçekleştiğinde olay dinleyici çalıştı
{
trace("Yazılan metin " + e.text);
// Kullanıcının TextField alanına girdiği karakterler Output
// ekranında görüntülendi
e.preventDefault( );
// Kullanıcının ekrana girdiği yazıların görünümü engellendi
9
yazi.appendText("o");
// Klavyeden her yazı yazıldığında TextField alanında "o"
// karakteri göründü
}
}
}
10
4. Olay Dinleyici O ncelig i (Event Listener Priority)
Bir olay türüne, birden fazla olay dinleyicisini kaydetmek mümkündür. Normalde birden fazla olay dinleyici bir olaya kaydedilmişse, program akışı içinde önce yazılan olay dinleyicisi çalıştırılmaktadır. Aşağıdaki "OncelikBelirleme.as" adlı dosyada "buton" adlı nesne, "sira1" ve "sira2" adlı iki olay dinleyicisine kayıtlıdır. Eğer program içinde herhangi bir öncelik sırası belirtilmeseydi, önce "sira1" adlı olay dinleyicisi çalıştırılacaktı ancak aşağıdaki kod satırlarında öncelik belirtildiği için normal akışın tersine önce "sira2" olay dinleyicisi çalışmaktadır.
Olay dinleyicinin önceliğini değiştirmek için, addEventListener() metodundaki "priority" parametresi ayarlanmalıdır.
addEventListener(type, listener, useCapture, priority, useWeakReference)
buton.addEventListener(MouseEvent.CLICK, sira2,false,1);
"priority" parametresi integer değer almaktadır. Bu değer ne kadar büyükse öncelikte o kadar fazladır. Örneğin "priority" parametresi 1 olan olay dinleyici, "priority" parametresi 0 olan olay dinleyiciden daha önceliklidir. Aynı "priority" parametresine sahip olay dinleyicileri varsa, öncelik program akışı içinde önce yazılan olay dinleyicidedir. Varsayılan olarak "priority" parametresi tüm olay dinleyiciler için 0'dır. Böyle olunca da program akışındaki dinleyicinin yazılma sırası önceliği belirlemektedir.
/* useCapture: (yakala) DOM ağaç yapısında olaylar, kökten (document nesnesinden) hedef elemente doğru sevk edilir ve tekrar document nesnesine geri döner. Bu sevk işlemi sırasında olayın gerçekleştiği elemente ulaşana kadar geçen bütün elementlerde, ilgili olay için bir olay dinleyicisi mevcutsa bu elementlere de olayın gerçekleştiği bildirilir.Yakala seçeneği burada olayın hedef elemente giderken mi yoksa document nesnesine dönerken mi yakalanacağını belirler. true hedefe giderken, false ise dönerken yakalanacağını belirtir.*/
11
package
{
import flash.display.*;
import flash.events.*;
public class OncelikBelirleme extends Sprite
{
public function OncelikBelirleme( )
{
var buton:Button=new Button();
addChild(buton);
buton.addEventListener(MouseEvent.CLICK, sira1,false,0);
buton.addEventListener(MouseEvent.CLICK, sira2,false,1);
}
private function sira1(e:Event):void
{
trace("sira1 sonra gerçekleşti");
}
private function sira2(e:Event):void
{
trace("sira2 önce gerçekleşti");
}
}
}
// Program Ekran Çıktısı
// sira2 önce gerçekleşti
// sira1 sonra gerçekleşti
12
Zayıf Dinleyici Referansı (Weak Listener References)
ActionScript 3.0, zayıf ve kuvvetli bellek referansı diye nesneler üzerinde bellek yönetimi gerçekleştirmektedir. Genellikle bir nesneye yönelik belirli bir referans yoksa, nesne bellek çöp toplayıcılar tarafından toplanarak belleğin gereksiz kullanımı önlenmektedir.
addEventListener() metodundaki "useWeakReference" özelliği "true" yapılarak olay dağıtıcılar ve olay dinleyiciler arasında zayıf bir bağlantı kurulmaktadır. Yani olay dağıtıcılar dinlenirken eğer olay dinleyici silinmişse, zayıf referans değerinin "true" olması ile bellek çöp toplayıcılara izin verilmiş olur. Böylelikle kayıttan çıkarılması unutulan olaylar belleğin gereksiz kullanımı önlenmiş olur.
addEventListener(type, listener, useCapture, priority, useWeakReference)
addEventListener() metodundaki "useWeakReference" özelliğinin varsayılan değeri "false" dur.
13
ActionScript 3.0 : Olaylar IV: İsteğe Göre Oluşturulan Olaylar (Custom Events)
İsteğe göre oluşturulan olayları ActionScript 3.0'da olay dinleyicilere dağıtmak için "EventDispatcher" sınıfı miras alınmalıdır. Böylelikle olay sınıfından oluşturulan bir nesne sanki olay hedefi gibi davranacaktır. Ayrıca oluşturulacak olaya bir isim verilmeli ve "EventDispatcher" sınıfının dispatchEvent() metodu kullanılmalıdır.
Aşağıda iki sınıf dosyasından "UyariYap.as" dosyasında istenilen olay
public static const UYARI_ILETISI:String = "SigarayaHayır";
komut satırı ile oluşturuluyor. Oluşturulmak istenilen olayın ismi sabitler(constants) ile tanımlanmaktadır. Sabitlere isim verirken tüm karakterlerin büyük harflerle ifade edilmesi yerinde olacaktır. İki farklı sözcük ile ifade edilecekse sabit ismi arada alt çizgi () kullanılmalıdır. UYARIILETISI buradaki örnekte oluşturulan olayın adıdır. UyariYap adlı olay sınıfı içinde olay adı belirtildikten sonra, olayın dağıtımını sağlayacak fonksiyon oluşturulmalıdır. Uyari() fonksiyonu çağrıldığında
dispatchEvent(new Event(UyariYap.UYARI_ILETISI));
komut satırı ile oluşturulan olay dağıtılacaktır. "Ilet.as" sınıf dosyasında ise; artık oluşturulan olay, bir olay dinleyiciye kaydedilmelidir. Bunun için önce olay sınıfından bir olay nesnesi oluşturulmalıdır.
var ilet:UyariYap= new UyariYap();
Olay nesnesi oluşturulduktan sonra addEventListener() metodu ile olay dinleyicisine kaydedilir.
ilet.addEventListener(UyariYap.UYARI_ILETISI, iletiListener);
Olay dinleyicine kayıtlı olay türü (UyariYap.UYARI_ILETISI) ile olay nesnesindeki dispatchEvent() metodundaki olay türü aynıdır.
package
{
import flash.events.*;
import flash.display.*;
import flash.utils.*;
14
public class UyariYap extends EventDispatcher
{
public static const UYARI_ILETISI:String = "SigarayaHayır";
public function UyariYap()
{
var zamanlayici:Timer = new Timer(1000, 1);
zamanlayici.addEventListener(TimerEvent.TIMER, zamanlayiciListener);
zamanlayici.start( );
function zamanlayiciListener(e:TimerEvent):void
{
uyari();
}
}
private function uyari():void
{
dispatchEvent(new Event(UyariYap.UYARI_ILETISI));
}
}
}
package
{
import flash.display.*;
import flash.events.*;
public class Ilet extends Sprite
{
public function Ilet()
{
var ilet:UyariYap= new UyariYap();
ilet.addEventListener(UyariYap.UYARI_ILETISI, iletiListener);
15
}
private function iletiListener(e:Event):void
{
trace("Sigara Sağlığa Zararlıdır!");
}
}
}
Kaynak:
http://active.tutsplus.com/tutorials/actionscript/quick-tip-using-as3-keycodes/

Hiç yorum yok:

Yorum Gönder