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

Swfler arası iletişim

Aytekin Meral Tarih: 5/06/2009 Yorum: 1 adet

Okunma : 894 Tutanlar: Bu yazıyı 0 kişi tuttu.

-Birbiri içine yüklenen 2 swf birbirlerinin değişken, fonksiyon ve methodlarına nasıl ulaşır?

-Actionscript 2.0'da kullandığımız _global'a ne oldu?

-static public değişkenler AS 3.0 yazarken en çok nerelerde işimize yararlar.

MMİstanbul

Yukardaki soruların bazıları, swfler arasında iletişim kurarken karşılaşabileceğiniz problemler arasında yer alabilir. Gelin bu soruları tek tek cevaplayalım ve birbiri içine yüklenen swf'ler arasında veri iletişiminin en kolay nasıl yapılacağını keşfedelim.

Soru 1) Birbiri içine yüklenen 2 swf birbirlerinin değişken, fonksiyon ve methodlarına nasıl ulaşır? Cevap: Değişkenlere ulaşmak için bu 2 swf içine de import edilmiş bir class (bir nevi runtime shared class, yani anlık oynama sırasında paylaşılan class) ve methodlara ulaşmak için de EventDispatcher ya da bahsi geçen runtime shared class kullanılır. Şimdi bu iki olayı da ayrı ayrı inceleyelim.

yöntem 1) static public değişkenler içeren bir class kullanmak: Öncelikle global.as adında bir class oluşturalım.


package {
    import flash.display.MovieClip;
    public class global {
        static public var ANA_ROOT:MovieClip;
        static public var COCUK_ROOT:MovieClip;
    }
}

ANA_ROOT: yükleyen swf'nin timeline'ı COCUK_ROOT: yüklenen swf'nin timeline'ı

Daha sonra ana.fla ve cocuk.fla adında iki FLA oluşturalım ve global.as ile yanı dizine ekleyelim.

ANA.FLA kodları


import global;
global.ANA_ROOT = this;
//işte sihir burada. ana.swf'nin root'unu static bir değişkene atadık.
//Artık istediğimiz her yerden ona erişebiliriz.
var anaDegisken = "Ben ana.swf içinde bir değişkenim ve cocuk.swf içinden çağrıldım"

var loader = new Loader();
loader.load(new URLRequest("cocuk.swf"));
addChild(loader);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);

function onComplete(e:Event):void {
    global.COCUK_ROOT = e.target.content;
//cocuk.swf'nin root'una erişmek için onun tamamının ana.swf içine yüklenmesi gerekir.
//Yükleme işlemi bittiğinde eşitlemeyi yapıyoruz.
    trace(global.COCUK_ROOT.cocukDegisken)
//burda cocuk.swf içinde bulunan bir değişkene ana.swf'den ulaşıyoruz.
}

COCUK.FLA kodları


import global;
var cocukDegisken = "Ben cocuk.swf içinde bir değişkenim ve ana.swf içinden çağrıldım";
trace(global.ANA_ROOT.anaDegisken);
//dikkat ederseniz ana.swf'nin rootuna global.ANA_ROOT ile erişiyoruz.

yöntem 2) Event Dispatcher ile methodlara ulaşmak.

Öncelikle kendi olaylarımızı yazıyoruz.


//MyEvents.as içeriği
package {
    import flash.events.Event;
    public class MyEvents extends Event {
        public var data:Object;
        public static  const FONKSIYON_CAGIR:String = "callAFunction";

        public function MyEvents(type, bubbles, cancelable) {
            super(type, bubbles, cancelable);
        }
        override public function clone():Event {
            var evt:MyEvents = new MyEvents(type, bubbles, cancelable);
            evt.data = data;
            return evt;
        }
    }
}

//ANA.FLA içeriği:
import MyEvents;
var loader = new Loader();
loader.load(new URLRequest("cocuk.swf"));
addChild(loader);
addEventListener(MyEvents.FONKSIYON_CAGIR, birFonksiyon);

function birFonksiyon(e:Event):void {
    if (e.hasOwnProperty("data")) {
        var param =  Object(e).data;
        trace("Ben ana.swf içinde bir fonksiyonum ve cocuk.swf içinden parametre gönderilerek çağrıldım. Parametrem ise şudur: "+param);
    } else {
        trace("Hata oluştu.");
    }
}

//COCUK.FLA içeriği
import MyEvents;
var newEvent = new MyEvents(MyEvents.FONKSIYON_CAGIR, true, true);
newEvent.data = "12345"
dispatchEvent(newEvent);

Bu şekilde cocuk.swf içinden ana.swf içindeki fonksiyonu çağırmış olduk. Bu yöntemi daha çok büyük projeler yazarken kullanmak size çok zaman kazandıracaktır. Çünkü flash içerisinde birçok yeni olay yaratacaksınız ve olay kütüphaneniz oluşmaya başlayacak.

Soru 2) Actionscript 2.0'da kullandığımız _global'a ne oldu? Cevap: _global artık yok. Onun yerine yukardaki birinci yöntemde kullandığımız static public değişkenler kullanıyoruz. Çünkü AS 3.0 class-based(sınıf tabanlı) bir yapı. Ana.swf dediğiniz şeyin kendisi aslında bir class, çocuk.swf ise ayrı bir class. Siz bu ikisi arasında iletişim kurarken, doğal olarak classlar arasında iletişim kuruyorsunuz. Bu da bize static, public, private, extends, super gibi anahtar ve methodların önemini gösteriyor tekrar.

Soru 3) static public değişkenler AS 3.0 yazarken en çok nerelerde işimize yararlar. Cevap: static public anahtarına sahip değişkenler, document class içinde olmamak koşulu ile, yani bir movieClibe ya da timeline'a adreslenmemiş iseler, import edildiği tüm classlar içinden erişilebilir ve runtime'da değiştirilebilirler. Kısacası bu türdeki değişkenleri hepsi _global değişken olabilirler. Aynı şekilde static public fonksiyonlar da tanımlayabilirsiniz.

Kaynak dosyaları indir

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

Profili Göster
Safa kızılkaya 17/06/2009

loaderInfo aracılığı ile statik tanımlar olmaksızın da child swf'den ana swf'nin rootuna erişmek mümkün.

Child swf şöyle bir kod çalıştırırsa:


var anaSwfRoot:*=(root.loaderInfo.loader.root as Object);

ana swf'nin root'una loaderInfo arayüzünden erişir.


anaSwfRoot.variable

yordamı ile de ana.swf'deki değişkene child swf den erişilir.

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 59 (50 kayıtlı, 9 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