ActionScript 3 Interaktif Objeler ve Çalışma Mantıkları (Dispatcher, Listener , Event)
Mehmet KARACA Tarih: 24/05/2008 Yorum: 8 adet
Okunma : 1114 Tutanlar: Bu yazıyı 5 kişi tuttu.
İlk dersimde ActionScript3 ‘ün bel kemigi diyebilcegim Dispatcher, listener, Event ‘den bahsedecegim.
Nedir bu Dispatcher, Listener, Event?
Sözlük karşılıkları şu şekilde:
Dispatcher = sevk memuru , hareket memuru -> "yönetici , yönlendirici"
Listener = dinleyici, dinleyen kimse
Event = olay, hadise, vaka, hal, durum
Dispatcher yani yönetici, ActionScript ‘deki interaktif tüm sınıfların içinde mevcuttur. Hatta interaktif sınıflar Dispatcher üzerine kurulmuştur.
Dispatcher, Listener, Event nasıl haberleşir nasıl çalışır?
İnteraktif tüm sınıflar Dispatcher yani yönetici temeline kurulmuştur demiştik. O nedenle ençok kullanılan MovieClip’den örnek verecegim.
mc1.addEventListener(MouseEvent.MOUSE_DOWN , gorev);
function gorev(e:MouseEvent){
trace( e.target.name )
}
AS3 ‘ü biraz kurcaladıgınızda göreceksiniz ki herşey aynı temel üzerine kurulu. Açıklamama devam edeyim.
MC1 isimli objenin içindeki Dispatcher diyor ki; "git Listener e Mouse olayların dan olan Mouse’nin tıklanma durumuna görev isimli fonksiyonu ekle".
MC1 isimli objenin dispatcher yöneticisine, bu şekilde olay guruplarındaki olay tiplerine baglanmış görevler ekleriz. Olaylar gerçekleştiginde bizim o olay tipine bagladığımız görevler çalışır.
Farklı birkaç Olaya görev eklemek:
// sahnenin ölçüsünün degişmesi
stage.addEventListener(Event.RESIZE,gorev)
// input text e yazı girilmesi
txt.addEventListener(TextEvent.TEXT_INPUT, textInputHandler);
Flash’ın Component’lerinde de bu böyledir. Video başladı mı, bitti mi, video’nun o anlık saniye durumu vs. Ses için de aynı olaylar gecerlidir. Resim için de; resim yüklemeye baslandı mı, yüklenme anı, yükleme bitti mi, olay anında hata oluştu mu. Bunlara ek olarak, dataGrid olayları, list olayları vs. heryerde kullanılıyor.
Gördüğünüz gibi interaktif tüm objeler de haberleşmeyi organize eden Dispatcher, dinleyen Listener, talep eden Event.
ScrollBar Örnegi:
ScrollBar için yazdıgım olay
package {
import flash.events.*;
public class scrollBarEvent extends Event {
public static const PERCENT = "percent";
public var percent:int = 0;
public function scrollBarEvent( olay , p ):void {
super( olay );
this.percent = p;
}
}
}
Ve scrollbar için yazdıgım Dispatcher yani yönetici ve içindeki Listener ler:
package {
import flash.events.EventDispatcher;
import flash.display.MovieClip;
import flash.events.*;
import flash.geom.Rectangle;
import caurina.transitions.Tweener;
public class scrollBar extends EventDispatcher {
public var target:MovieClip;
public var icerik_list:MovieClip;
public var percent:int;
public function scrollBar( target , icerik_list ):void {
this.target = target;
this.icerik_list = icerik_list;
this.init();
updateScroll();
}
public function init() {
this.icerik_list.icerik.mask = this.icerik_list.maske;
this.target.btn.buttonMode = true;
this.target.btn.addEventListener( MouseEvent.MOUSE_DOWN , StartDrag );
this.target.bg.addEventListener( MouseEvent.MOUSE_DOWN , scroll_bg_DownHandler );
this.icerik_list.addEventListener( MouseEvent.MOUSE_WHEEL , mouseWheelHandler )
}
public function StartDrag( event:MouseEvent):void{
this.target.btn.startDrag( false , new Rectangle(0,0,0, (this.target.bg.height-this.target.btn.height)));
this.target.stage.addEventListener(MouseEvent.MOUSE_UP , StopDrag );
this.target.stage.addEventListener(MouseEvent.MOUSE_MOVE , Move );
this.target.stage.addEventListener(Event.MOUSE_LEAVE , StopDrag );
}
public function StopDrag( event:MouseEvent):void{
this.target.btn.stopDrag();
this.target.stage.removeEventListener(MouseEvent.MOUSE_UP , StopDrag);
this.target.stage.removeEventListener(MouseEvent.MOUSE_MOVE , Move );
this.target.stage.removeEventListener(Event.MOUSE_LEAVE , StopDrag );
}
public function Move( event:MouseEvent=null):void{
percent = this.target.btn.y/(this.target.bg.height-this.target.btn.height)*100;
updateIcerik( percent )
this.dispatchEvent( new scrollBarEvent( scrollBarEvent.PERCENT , percent ) );
trace("move")
}
// sb update
public function updateScroll( event:MouseEvent=null):void{
this.target.btn.height = int((this.icerik_list.maske.height*this.target.bg.height)/this.icerik_list.icerik.height)
if( this.target.btn.y < 0 ){
this.target.btn.y = 0;
}else if( this.target.btn.y > (this.target.bg.height-this.target.btn.height)){
this.target.btn.y = (this.target.bg.height-this.target.btn.height)
}
Move();
trace("update scroll")
}
// udate icerik
public function updateIcerik( percent ):void{
var hedef_y:Number = (((this.icerik_list.icerik.height-this.icerik_list.maske.height)/100)*percent)*-1
//this.icerik_list.icerik.y = hedef_y; // no efekt
Tweener.addTween( this.icerik_list.icerik , {y:hedef_y, time:.5, transition:"easeElasticOut" }); // Tweener efekt
trace("update icerik")
}
// Wheel
public function mouseWheelHandler( event:MouseEvent):void{
this.target.btn.y -= event.delta;
updateScroll();
trace("wheel")
}
// scroll_bg Click
public function scroll_bg_DownHandler( event:MouseEvent=null):void{
this.target.btn.y = int(this.target.mouseY-this.target.btn.height/2);
updateScroll();
}
}
}
Kullanımı
var sbControll:scrollBar = new scrollBar( sb , icerik_list );
sbControll.addEventListener( scrollBarEvent.PERCENT , scrollBarEventHandler );
function scrollBarEventHandler( e:scrollBarEvent ){
trace( e.sonuc )
}
// sb içinde bg , bt MovieClip leri olucak bu scroll un bar kısmı // icerikList içinde maske ,icerik MovieClip leri olucak
buraya kadar okuyanlara tesekkür ederim.
kolaygelsin..
selamlar sahne ölçüsünün değişmesi ile ilgili bir örnek yapabilir misiniz
merhaba
stage.addEventListener( Event.RESIZE , stageResize );
function stageResize( e:Event):void{
trace("w:\t"+stage.stageWidth);
trace("h:\t"+stage.stageHeight);
}
kolaygelsin..<<
mehmet kardeş ilgine bilgine teşekkürler.allah razı olsun fakat kodları denediğimde trace de hiç bir uyarı çıkmadı
merhaba
"ctrl + enter" yaptıkdan sonra pencerenin boyunu degistirdigin de çalısır o kod.
evet çok ilginç. bir şey daha öğrendim.fakat aklıma geldi denedim fakat olmadı.bu mantığa göre örneğin bir buton yapsak ve bu butona tıkladığımızda (swf) pencerenin boyutunu değiştirebilir miyiz diye
merhaba
web ortamın da yapıcaksan böyle birseyi
swf dosyanı width =100% height=100% şeklinde eklersin <div> içine
sonra flash javascript ile <div> in width height degerleri ile oynarsın swf dosya 100% oldugundan div ölçüsüne göre degişim gösredecektir denenmiş bir uygulamadır :D
kolaygelsin..<<
cevabın için çok sağol kardeş
Makale
İlişkili makale bulunamadı.
Haber
İlişkili haber bulunamadı.
MMIstanbul Adobe UG
ColdFusion, Flex, AIR, Flash, PDF, Dreamweaver, Fireworks, Photoshop, Illustrator, iNdesign, Premiere, Soundbooth, Lightroom, InCopy, JRun, LiveCycle, Acrobat, AfterEffects, Resmi Adobe Kullanıcı Grubu.
Etkinlikler
Fuar
CeBIT 2008 Bilişim Eurasia 7 - 12 Ekim 2008' de
CeBIT 2008 Bilişim Eurasia 7 - 12 Ekim 2008' de
CeBIT Bilişim Eurasia bu yıl 7 – 12 Ekim tarihlerinde düzenleniyor
Adını dünyanın en büyük on fuarı arasına yazdırarak, İstanbul’u Avrasy...
Kategori: Fuar
Kimler Burada? 
Son 1 dakika içinde MMIstanbul' da 247 (2 kayıtlı, 245 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





as2 de kimizaman kullanırdık mouseyi sanki tıklanmıs gibi gösterip gerekli functionların çalısması için.
bunun as3 deki karsılıgı ise yöneticiden geçiyor.