Türkiye Online Medya Araştırması
Profili Göster

ActionScript 3 Interaktif Objeler ve Çalışma Mantıkları (Dispatcher, Listener , Event)

Mehmet KARACA Tarih: 24/05/2008 Yorum: 9 adet

Okunma : 3568 Tutanlar: Bu yazıyı 8 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 8/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ş

Profili Göster
Hakan YILDIZ 16/11/2008

DSOTUM BİRDE GO TO KOMUTU NUN AS3 TEKİ KODUNU BİR ÖRMEKLE VEREBİLİRMİSİN. İLK KAREDEKİ YAZIYA TIKLANDIĞINDA SON KAREYE GİTMESİ GİBİ MESELA.

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

yeni üyelik | şifremi unuttum

aç-kapa Toplantı Özgür Yazılım ve Linux Günleri '10

Özgür Yazılım ve Linux Günleri '10

İstanbul Bilgi Üniversitesi Bilgisayar Bilimleri Bölümü ve Linux Kullanıcıları Derneği'nin 9 yıldır düzenlemekte oldukları etkinlikler bu yıl `Özgür Y...
Kategori: Toplantı

aç-kapa Yarışma 3. Uluslararası Ekslibris Yarışması: İstanbul 2010

3. Uluslararası Ekslibris Yarışması: İstanbul 2010

İstanbul Ekslibris Dernegi, Feyziye Mektepleri Vakfı ve Işık Üniversitesi, kitaplar için mülkiyet işareti olarak kabul edilen ve üzerinde estetik dege...
Kategori: Yarışma

aç-kapa Konferans Yeni Medya ve Etkileşim Konferansı 2010 - Marmara Üniversitesi

Yeni Medya ve Etkileşim Konferansı 2010 - Marmara Üniversitesi

Generally speaking, the term "New" brought about debates. We try to open up and elucidate the term "New" along with "Interact...
Kategori: Konferans

aç-kapa Konferans 3. Uluslararası Gelecek İçin Öğrenme Alanında Yenilikler Konferansı 2010: e-Öğrenme

3. Uluslararası Gelecek İçin Öğrenme Alanında Yenilikler Konferansı 2010: e-Öğrenme

Konferans ile ilgili ayrıntılı bilgiye aşağıdaki bağlantıdan ulaşabilirsiniz: http://www.futurelearning.org.tr/katilim_cagrisitr.pdf ...
Kategori: Konferans

üyeler Son Kahramanlar...

stats Kimler Burada? web stats

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

...

Blog Bölümü Blogevi.com'a Taşınıyor

Selam arkadaşlar MMIstanbul'da , tasarımcı ve programcıların blog yazılarını "feedleyerek" MMIstanbul okurlarını MMIstanbul dışın ...

7.500'üncü üyemiz Cem Koç!

Neler Yapılabilir?

500 Hatası Hakkında!

Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)

coldfusion mysql ubuntu
 
sponsor adobe istanbul