Bir Flash SWF dosyası içinden diğer harici SWF dosyalarını varlık olarak yükleyebilirsiniz. Dışarıdan SWF dosyalarını yüklemenin çeşitli nedenleri olabilir:
- Bir proje birden çok filme bölünebileceği için her bir SWF dosyası küçük boyuttadır. Daha küçük dosyalar daha hızlı yüklenir ve belleği daha etkin kullanır.
- Kullanıcının filminizde ne yaptığına bağlı olarak sadece ihtiyacınız olan içeriği yüklemenizi sağlar.
- Tarayıcınız başka bir HTML sayfası yüklemeden birden fazla SWF dosyası birbiri ardına oynatılabilir. Sayfalarda yeniden yüklenmeyle ilişkili olarak duraklama veya yeniden yükleme yoktur.
- Bu durum, proje varlıklarınızın organizasyonu hakkında büyük esneklik sağlar.
- Tek bir SWF dosyasına dayanmayan karmaşık bir kullanıcı arabirimi oluşturulabilir. SWF dosyalarının çoğu arabirimi oluşturmak için birleştirilebilir. SWF dosyalarının birleştirilmesi düzenlemeyi basitleştirir çünkü ayrı bir küçük SWF dosyası arayüzün diğer bölümlerini etkilemeden değiştirilebilir.
- Birden fazla yazar ayrı FLA dosyaları üzerinde çalışarak aynı proje üzerinde ortak çalışabilir.
İçeriğin ayrı bir SWF dosyasına yerleştirilmesi, içeriğin kendi film klibi sembolüne yerleştirilmesine benzerdir. Aradaki fark içeriğin ana SWF dosyasının dışında olmasıdır. JPG, PNG, GIF gibi resim dosyalarını da yükleyebilirsiniz.
Harici bir SWF dosyasını başka bir SWF dosyası içinden yüklemek için aşağıdakilerden birini kullanın:
- ActionScript 3.0 Loader sınıfı
- ActionScript 2.0 loadMovie komutu
- ActionScript 2.0 MovieClipLoader sınıfı
ActionScript 3.0'daki Loader sınıfı, harici içeriği yüklemek ve görüntülemek için kullandığınız DisplayObject'in alt sınıfıdır. SWF dosyasını yüklemek için sınıfın load yöntemini kullanın. Load yöntemi, bir adet parametre gerektirir; bu da yüklenecek içeriğin URL adresini içeren bir URLRequest örneğidir.
Aşağıdaki kod örneği bir Loader örneği oluşturur ve "myExternalMovie.swf" adında harici bir SWF dosyası yükler.
var myLoader:Loader = new Loader(); // create a new instance of the Loader class var url:URLRequest = new URLRequest("ExternalSWF.swf"); // in this case both SWFs are in the same folder myLoader.load(url); // load the SWF file addChild(myLoader); // add that instance to the display list, adding it to the Stage at 0,0 // (optional) myLoader.x = 10; // move the loaded SWF 10 pixels to the right (from the left edge) myLoader.y = 175; // move the loaded SWF 175 pixels down from the top // (optional) load a second external SWF file var my2ndLoader:Loader = new Loader(); var url2:URLRequest = new URLRequest("ExternalSWF2.swf"); my2ndLoader.load(url2); addChild(my2ndLoader); // optionally, you could put the 2nd SWF beneath // the 1st by using addChildAt(my2ndLoader, 1); // displacing the 1st SWF from position 1 to 2 in the display list // (optional) scaling of the 2nd SWF file my2ndLoader.scaleX = 2; // scale the SWF horizontally by 200% my2ndLoader.scaleY = 2; // scale the SWF vertically by 200%
Yüklenen SWF dosyasının URL'si göreceli veya mutlak olabilir. Flash Player'ın URL'leri nasıl işlediği hakkında daha fazla bilgi için Göreceli Yollar bölümüne bakınız. Loader sınıfı hakkında daha fazla bilgi için ActionScript Dil Başvurusu Platformu'nda Loader'a bakınız.
Varsa köke yapılan başvurular, her zaman listenin ağaç yapısının SWF dosyasının temsil ettiği kısmında en üstte görüntülenen nesneleri yansıtır. (Görüntüler için, kök Bitmap nesnesine başvuruda bulunur.)
Not: ActionScript 3.0'da ActionScript 2.0 _lockroot veya _level özelliğinin eşiti yoktur. ActionScript 3.0 Geliştirici Kılavuzunda Görüntü programlama temelleri bölümüne bakınız.
- Bu Teknik Not için örnek dosyalar. Bir üst SWF dosyası ve üst dosyanın yüklediği iki SWF dosyası dahil 3 FLA ve bunların ilgili üç SWF dosyasından oluşan bir grup.
- Yardım > AS3 Geliştirici Kılavuzu > Harici bir SWF dosyasını yükleme
- Yardım > AS3 Geliştirici Kılavuzu > Görüntüleme içeriğini dinamik olarak yükleme
- Bir ana SWF dosyasında birden fazla harici SWF yükleme - CreativeCow.net forumları
- Video eğitimi: ActionScript 101 - Bölüm 6: Sahneye adlandırılmış nesneler ekleme. Doug Winnie. Yüklenen harici varlığı Sahne alanına eklemenin ve konumunu veya başka özelliklerini değiştirmenin bir örneği.
- Eğitim: SWF'leri yükleme ve kaldırma - FlashAndMath.com
loadMovie komutu harici bir SWF dosyasını veya resmini ActionScript 2.0'da bir MovieClip'e veya üst filmin başka bir düzeyine yükler.
loadMovie komutunun iki farklı biçimi vardır:
- MovieClip.loadMovie yöntemi: MovieClip yöntemi, harici içeriği belirli bir film klibi örneğine yüklemek için kullanılır.
- Global loadMovie işlevi: Global loadMovie işlevi, filmlere ya da düzeylere içerik yüklemek için kullanılabilir. Global versiyonun da loadMovie ve loadMovieNum olmak üzere iki varyasyonu vardır. İlk varyasyon, içeriği filmlere ya da düzeylere yükler ve ikincisi (loadMovieNum) özellikle düzeylere yükler.
Dışarıdan içeriği film klibi örneklerine yüklerken, Adobe loadMovie'nin MovieClip yöntemi versiyonunu kullanmanızı tavsiye etmektedir. Bu sürüm içeriği içine yüklemek istediğiniz film klibinden doğrudan çağrılır ve içerik URL'sine aktarılır.
myMovieClipInstance.loadMovie("myExternalMovie.swf"); // here only the filename is given, indicating the SWF file // is in the same folder as the parent SWF.
Yüklenen içeriğin URL'si göreli ya da mutlak olabilir. Flash Player'ın URL'leri nasıl işlediği hakkında daha fazla bilgi için Göreceli Yollar bölümüne bakınız.
İçerik yüklendiğinde, kapsayıcı film klibinde görüntülenir. Kapsayıcı film klibinin konumu ve diğer temel özellikleri korunur. Ancak kapsayıcı film klibi dahilinde tanımlanan özel özellikler veya işlevler artık yoktur. Yeni içerik, önceki bütün içeriğin yerini alır (kod ve onRelease gibi olay işleyiciler dahil). Bu nedenle, film klibi için bir onLoad olay işleyici kullanma çabaları başarısız olur. Bu durumda MovieClipLoader sınıfını kullanın (aşağıya bakınız). MovieClip.loadMovie hakkında daha fazla bilgi için ActionScript 2.0 Dil Başvurusu'nda MovieClip.loadMovie bölümüne bakınız.
LoadMovie komutu ayrıca global bir işlev olarak da bulunmaktadır. Bu işlevin, harici içeriğin URL'si ve içeriğin yüklendiği hedef olmak üzere iki zorunlu parametresi vardır. Hedef parametre bir dize ya da bir başvuru olabilir. Aşağıdaki satırlar, "myExternalMovie.swf"yi myContainer adlı film klibi örneğine yüklemeye karşılık gelir:
loadMovie("myExternalMovie.swf", myContainer); // the target myContainer is an object reference loadMovie("myExternalMovie.swf", "myContainer"); // the target "myContainer" is a string
LoadMovie ayrıca Flash player'ın farklı düzeylerine de içerik yükleyebilir. Flash player'daki düzeyler, oynatıcı katmanları gibidir. Flash player'ın aynı örneğinde birbiri içine geçmeden birden fazla film oynatılabilir. Her düzey, filmlerin başka düzeylerdeki filmlerden bağımsız olarak oynatılabileceği benzersiz bir kökü temsil eder (_lockroot kullanmak gereklidir).
ActionScript'teki düzeylere _level'ın ardından düzey numarasını temsil eden bir numarayla başvuruda bulunabilirsiniz. Flash Player'a yüklenen ilk film, _level0 düzeyindedir. O düzeyin üzerine ek düzeyler eklenebilir. Aşağıdaki loadMovie çağrısı, oynatıcıda oynatılan filmin üstünde 1. seviyeye "myExternalMovie.swf" dosyasını yükler.
loadMovie("myExternalMovie.swf", "_level1");
Global loadMovie işlevinin bir varyasyonu loadMovieNum'dur. Bu yöntem, yalnızca düzeyleri hedef alması ve ad ile değil numarayla hedef alması dışında tıpkı loadMovie gibidir. Harici bir SWF dosyasını örneğin Düzey 1'e (_level1) yüklemek için şunu kullanın:
loadMovieNum("myExternalMovie.swf", 1);
Düzeylere yükleme yaparken, Adobe loadMovie yerine loadMovieNum'u kullanmanızı tavsiye etmektedir. Daha fazla bilgi için, ActionScript 2.0 Dil Başvurusu bölümünde bulunan global loadMovie başlığına bakınız.
Harici bir filmi başka bir filme yüklerken, yüklenen film klibinin _root başvurusu ana zaman çizelgesinden yükleyen filmin zaman çizelgesine değişir. Diğer bir deyişle, _root her zaman hiyerarşideki en üst zaman çizelgesini referans alır. _root'un en üst zaman çizelgesini referans almasını istemiyorsanız yüklenen film klibinin zaman çizelgesinin _lockroot özelliğini true olarak ayarlayın. Bu özellik, o zaman çizelgesinin bütün alt öğelerine _root'u referans aldıklarında, o zaman çizelgesini referans almalarını söyler.
this._lockroot = true; // add this code in the main timeline of the SWF file that will be loaded into another SWF
Not: _lockroot özelliği yalnızca Flash Player 7 veya üstü bir sürüme yayınlama yaparken kullanılabilir.
- Yardım > ActionScript 2.0'ı Öğrenme > Harici SWF dosyalarını ve görüntü dosyalarını yükleme
ActionScript 2.0'da MovieClipLoader sınıfı, harici içeriğin MovieClip örneklerine yüklenmesi sürecini kolaylaştırmak üzere tasarlanmıştır. Daha önce belirtildiği gibi film kliplerinde belirtilen değişkenler ve işlevler, bu film kliplerine yeni içerik yüklendiğinde kaldırılır. onLoad gibi çağrılar mümkün değildir. Ancak MovieClipLoader, bu olaylara vekil gibi çalışarak bu kısıtlamayı aşar. İçeriğin başka bir film klibine yüklenmesini yönetmek için ayrı MovieClipLoader örnekleri oluşturabilirsiniz. Bu nedenle bu film klibinde değişkenlerin ve işlevlerin temizlenmesi gerçekleşmez.
MovieClipLoader sınıfını kullanarak bir film klibine içerik yüklerken öncelikle sınıfın yeni bir örneğini oluşturun. Ardından loadClip'i kullanarak içeriği hedef film klibine yükleyin. Aşağıdaki örnekte myContainer film klibine yeni içerik yüklenmektedir.
var myLoader:MovieClipLoader = new MovieClipLoader(); myLoader.loadClip("myExternalMovie.swf", myContainer);
İçeriğin yüklendiğini bilmek istiyorsanız MovieClipLoader örneğinizle bir onLoadInit olay işleyici kullanın.
var myLoader:MovieClipLoader = new MovieClipLoader(); myLoader.addListener(this); myLoader.loadClip("myExternalMovie.swf", myContainer); function onLoadInit(mc:MovieClip) { trace("content has been loaded into "+mc); }
İçeriğin bir film klibine yüklenmesine ilişkin bilgiler üzerinde denetime sahip olmak istediğinizde MovieClip.loadMovie yerine MovieClipLoader sınıfını kullanın. (Örneğin yükleme işlemini denetleyebilmek istediğinizde bu olay işleyiciyi kullanın.)MovieClipLoader sınıfı hakkında daha fazla bilgi için ActionScript 2.0 Dil Başvurusu'nda MovieClipLoader bölümüne bakınız.
Not: MovieClipLoader sınıfı sadece Flash Player 7 veya üstü bir sürüme yayınlama yaparken kullanılabilir.
Loader ve loadMovie ile göreceli yolların kullanılması kafa karıştırıcı olabilir. Herhangi bir SWF dosyasının veya film klibinin zaman çizelgesi loadMovie eylemini gerçekleştirebileceğinden dolayı "film hangi zaman çizelgesine yükleniyor"? sorusunu sorun. _level0'daki ana zaman çizelgesine göre mi? Veya film yükleme işlemini gerçekleştiren zaman çizelgesine göre mi? Cevap basit: Yüklenen filmler her zaman kendisini yükleyen zaman çizelgesine görecelidir. Harici SWF dosyalarının yüklenmesiyle ilgili olan göreceli yollarla ilgili bilgi için Göreceli URL'lere doğru başvuruda bulunulmuyor | Flash (tn_04157) bölümüne bakınız.
Çoğu durumda yüklenen film, ana filmin kare hızını alır. Örneğin kare hızı 12 fps olan bir SWF dosyası, kare hızı 24 fps olan bir filme yüklendiğinde 24 fps kare hızıyla oynatılır. Tek istisna yüklenen filmin senkronizasyonu "akış"a ayarlanmış zaman çizelgesinde bir ses içeriyor olmasıdır. Bu durumda ana film, yüklenen filmin kare hızını alarak sesin doğru çalınmasını sağlar.
Not: ActionScript 3.0, Stage.frameRate özelliğini kullanarak kare hızını dinamik olarak değiştirmenizi sağlar.
- ActionScript'i kullanarak SWF'den SWF'ye iletişim (ana alt ve alt ana nesne iletişimini kapsar)