Profili Göster

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..

aç-kapa İçeriğin rss beslemesi kullanımda değil Yorumlar

Profili Göster
Mehmet KARACA 24/05/2008

as2 de kimizaman kullanırdık mouseyi sanki tıklanmıs gibi gösterip gerekli functionların çalısması için.

mc.onPress();

bunun as3 deki karsılıgı ise yöneticiden geçiyor.

mc.dispatchEvent( new MouseEvent( MouseEvent.MOUSE_DOWN) ) ;
Profili Göster
palax1 1/06/2008

selamlar sahne ölçüsünün değişmesi ile ilgili bir örnek yapabilir misiniz

Profili Göster
Mehmet KARACA 2/06/2008

merhaba


stage.addEventListener( Event.RESIZE , stageResize );
function stageResize( e:Event):void{
    trace("w:\t"+stage.stageWidth);
    trace("h:\t"+stage.stageHeight);
}

kolaygelsin..<<

Profili Göster
palax1 8/06/2008

mehmet kardeş ilgine bilgine teşekkürler.allah razı olsun fakat kodları denediğimde trace de hiç bir uyarı çıkmadı

Profili Göster
Mehmet KARACA 9/06/2008

merhaba

"ctrl + enter" yaptıkdan sonra pencerenin boyunu degistirdigin de çalısır o kod.

Profili Göster
palax1 9/06/2008

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

Profili Göster
Mehmet KARACA 9/06/2008

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..<<

Profili Göster
palax1 9/06/2008

cevabın için çok sağol kardeş

aç-kapa Yazarın Diğer Yazıları

MMIstanbul Adobe UG MMIstanbul Adobe UG

adobe user group

ColdFusion, Flex, AIR, Flash, PDF, Dreamweaver, Fireworks, Photoshop, Illustrator, iNdesign, Premiere, Soundbooth, Lightroom, InCopy, JRun, LiveCycle, Acrobat, AfterEffects, Resmi Adobe Kullanıcı Grubu.

yeni üyelik | şifremi unuttum

aç-kapa 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

aç-kapa Yarışma Altın SIM Kart Ödülleri

Altın SIM Kart Ödülleri

Altın SIM Kart Ödüllerinin bu yıl birincisi düzenleniyor. Üç ana kategorideki toplam 20 alt kategoride 200 adayın yarışacağı organizasyonun oylaması h...
Kategori: Yarışma

aç-kapa Konferans IBM Yazılım Zirvesi '08, Değişim Açlığı

IBM Yazılım Zirvesi '08, Değişim Açlığı

Değişim açlığı, Hungry for Change teması çerçevesinde düzenlenecek IBM Yazılım zirvesi Ankara ve İstanbulda düzenlenecek: 15 Ekim 2008 Swissotel the...
Kategori: Konferans

aç-kapa Fuar Contemporary İstanbul Sanat Fuarı

Contemporary İstanbul Sanat Fuarı

Contemporary İstanbul Sanat Fuarı, 16-19 Ekim tarihleri arasında sanatseverlerle buluşacak. Bu yıl üçüncüsü düzenlenen fuar, İstanbul Lütfi Kırdar Ulu...
Kategori: Fuar

aç-kapa Yarışma TBD - Halıcı 15. Bilgisayarla Beste Yarışması

TBD - Halıcı 15. Bilgisayarla Beste Yarışması

TBD – Halıcı 15. Bilgisayarla Beste Yarışması TBD – Halıcı Bilgisayarla Beste Yarışması Türkiye Bilişim Derneği tarafından düzenlenen &q...
Kategori: Yarışma

üyeler Son Kahramanlar...

stats Kimler Burada? web stats

Son 1 dakika içinde MMIstanbul' da 247 (2 kayıtlı, 245 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:

coldfusion mysql ubuntu