Ze souboru SWF s obsahem Flash můžete načíst další externí soubory SWF jako datové zdroje. Načítání externích souborů SWF přináší několik výhod:

  • Při rozdělení projektů do více filmů nebudou jednotlivé soubory SWF tak velké. Menší soubory se rychleji načítají a správa paměti je v takovém případě efektivnější.  
  • Máte možnost načítat pouze potřebný obsah (podle toho, co uživatel ve filmu dělá).
  • Více souborů SWF lze přehrávat postupně, aniž by musel prohlížeč načítat jinou stránku HTML. Na stránkách nedochází v souvislosti s opakovaným načítáním k pauzám ani se neaktualizují.
  • Máte větší flexibilitu při uspořádávání datových zdrojů projektu.
  • Lze vytvořit složité uživatelské rozhraní, ve kterém se nebude využívat pouze jeden soubor SWF. Rozhraní lze vytvořit spojením velkého množství souborů SWF. Spojením více souborů SWF dojde ke zjednodušení úprav, protože jednotlivé menší soubory SWF lze revidovat, aniž by to mělo vliv na ostatní části rozhraní.
  • Na jednom projektu můžete spolupracovat více autorů, kteří budou pracovat na samostatných souborech FLA.

Umístění obsahu do samostatného souboru SWF je podobné jako umístění obsahu do vlastního symbolu filmového klipu. Rozdíl je v tom, že se obsah nachází mimo hlavní soubor SWF. Můžete načítat také obrazové soubory, například JPG, PNG nebo GIF.

K načtení externího souboru SWF z jiného souboru SWF můžete použít:

  • třídu Loader jazyka ActionScript 3.0,
  • příkaz loadMovie jazyka ActionScript 2.0,
  • třídu MovieClipLoader jazyka ActionScript 2.0.

Použití třídy Loader jazyka ActionScript 3.0

Třída Loader v jazyce ActionScript 3.0 je podtřída třídy DisplayObject, která slouží k načtení a zobrazení externího obsahu. K načtení souboru SWF použijete metodu load této třídy. Metoda load používá jediný povinný parametr. Tím je instance třídy URLRequest obsahující adresu URL obsahu, který má být načten.

Pomocí kódu v následujícím příkladu bude vytvořena instance třídy Loader a bude načten externí soubor SWF s názvem myExternalMovie.swf.

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%

Adresa URL načítaného souboru SWF může být relativní nebo absolutní. Informace týkající se způsobu zpracování adres URL v aplikaci Flash Player najdete v níže uvedené části, která je věnována relativním cestám. Další informace o třídě Loader najdete v popisu třídy Loader v referenční příručce k jazyku ActionScript pro danou platformu.

Pokud je použit element root, vždy reprezentuje v části stromové struktury seznamu zobrazení, kterou daný soubor SWF představuje, objekt zobrazení na nejvyšší úrovni. (U obrazů odkazuje element root na objekt Bitmap.)

Poznámka: V jazyce ActionScript 3.0 neexistuje ekvivalent k vlastnosti _lockroot nebo _level jazyka ActionScript 2.0. Viz článek Základy programování zobrazení v příručce pro vývojáře v jazyce ActionScript 3.0.

Použití příkazu loadMovie jazyka ActionScript 2.0

Příkaz loadMovie načte externí soubor SWF nebo obraz do objektu MovieClip nebo jiné úrovně nadřazeného filmu v jazyce ActionScript 2.0.

Příkaz loadMovie má dvě různé podoby:

  • Metoda MovieClip.loadMovie: Metoda MovieClip slouží k načtení externího obsahu do konkrétní instance filmového klipu.
  • Globální funkce loadMovie: Globální funkci loadMovie lze použít k načtení obsahu do filmů nebo úrovní. Globální verze má také dvě varianty – loadMovieloadMovieNum. První varianta načítá obsah do filmů nebo úrovní, zatímco druhá varianta (loadMovieNum) načítá obsah výhradně do úrovní.

Metoda MovieClip.loadMovie

Při načítání externího obsahu do instancí filmového klipu společnost Adobe doporučuje použít verzi příkazu loadMovie s použitím metody MovieClip. Tato verze příkazu je volána přímo z filmového klipu, do kterého chcete obsah načíst, a je jí předána adresa URL příslušného obsahu.

myMovieClipInstance.loadMovie("myExternalMovie.swf");  // here only the filename is given, indicating the SWF file 
                                                       // is in the same folder as the parent SWF.

Adresa URL načítaného obsahu může být relativní nebo absolutní. Informace týkající se způsobu zpracování adres URL v aplikaci Flash Player najdete v níže uvedené části, která je věnována relativním cestám.

Po načtení je obsah zobrazen v kontejnerovém filmovém klipu. Umístění i další základní vlastnosti kontejnerového filmového klipu zůstanou zachovány. Žádné vlastní vlastnosti ani funkce definované v rámci kontejnerového filmového klipu však zachovány nebudou. Veškerý předchozí obsah (včetně kódu a obslužných rutin událostí, například rutiny onRelease) je nahrazen novým obsahem. Obslužná rutina události onLoad tedy nebude fungovat. V takovém případě místo ní použijte třídu MovieClipLoader (viz níže). Další informace o metodě MovieClip.loadMovie najdete v části s popisem metody MovieClip.loadMovie v referenční příručce k jazyku ActionScript 2.0.

Globální funkce loadMovie a loadMovieNum

Příkaz loadMovie existuje také v podobě globální funkce. Tato funkce má dva povinné parametry – adresu URL externího obsahu a cílový objekt, do kterého má být obsah načten. Cílový objekt může být zadán jako řetězec nebo jako odkaz. Na následujících řádcích jsou uvedeny ekvivalentní příkazy pro načtení souboru myExternalMovie.swf do instance filmového klipu s názvem myContainer:

loadMovie("myExternalMovie.swf", myContainer);    // the target myContainer is an object reference
loadMovie("myExternalMovie.swf", "myContainer");  // the target "myContainer" is a string

Pomocí příkazu loadMovie lze také načíst obsah do různých úrovní přehrávače Flash. Úrovně v přehrávači Flash jsou něco jako vrstvy přehrávače. V jedné instanci přehrávače Flash lze přehrávat současně více filmů, aniž by byly vzájemně vnořeny. Každá úroveň představuje jedinečný element root, kde se mohou filmy přehrávat nezávisle na filmech na jiných úrovních (je nutné použít vlastnost _lockroot).

Na úrovně lze v jazyce ActionScript odkazovat pomocí vlastnosti _level, za kterou následuje číslo představující číslo úrovně. První film načtený do aplikace Flash Player je na úrovni _level0. Nad danou úroveň lze přidávat další úrovně. Při následujícím volání příkazu loadMovie je soubor myExternalMovie.swf načten do úrovně 1, která je v přehrávači nad úrovní, ve které se aktuálně přehrává film.

loadMovie("myExternalMovie.swf", "_level1");

Variací globální funkce loadMovie je funkce loadMovieNum. Tato metoda je téměř stejná jako metoda loadMovie. Rozdíl je pouze v tom, že jejím cílem jsou úrovně a tyto úrovně jsou určeny číslem, nikoli názvem. Chcete-li například externí soubor SWF načíst do úrovně 1 (_level1) použijte následující příkaz:

loadMovieNum("myExternalMovie.swf", 1);

Při načítání do úrovní doporučuje společnost Adobe používat raději příkaz loadMovieNum než příkaz loadMovie. Další informace jdete v části s popisem globální funkce loadMovie v referenční příručce k jazyku ActionScript 2.0.

Zabránění konfliktům elementů _root pomocí vlastnosti _lockroot

Při načítání externího filmu do jiného filmu se odkaz s elementem _root načteného filmového klipu změní z jeho hlavní časové osy na časovou osu filmu, který jej načetl. Jinými slovy lze říci, že element _root vždy odkazuje na časovou osu, která je v hierarchii na nejvyšší úrovni. Pokud nechcete, aby element _root odkazoval na časovou osu na nejvyšší úrovni, nastavte vlastnost _lockroot hlavní časového osy načítaného filmového klipu na hodnotu true. Díky nastavení této vlastnosti budou všechny podřízené objekty dané časové osy vědět, že když odkazují na element _root, odkazují na danou časovou osu.

this._lockroot = true;     // add this code in the main timeline of the SWF file that will be loaded into another SWF

Poznámka: Vlastnost _lockroot je k dispozici pouze při publikování v aplikaci Flash Player 7 nebo novější.

Použití třídy MovieClipLoader jazyka ActionScript 2.0

Třída MovieClipLoader v jazyce ActionScript 2.0 je určena k usnadnění procesu načítání externího obsahu do instancí příkazu MovieClip. Jak již bylo uvedeno dříve, jsou proměnné a funkce definované ve filmových klipech při načtení obsahu do těchto filmových klipů odebrány. Zpětná volání, například pomocí metody onLoad, nejsou možná. Třída MovieClipLoader však umožňuje toto omezení obejít tím, že funguje jako zástupce těchto událostí. Při správě načítání obsahu do jiného filmového klipu vytváříte samostatné instance třídy MovieClipLoader. Proto nedochází k vymazání proměnných ani funkcí v daném filmovém klipu.

Při načítání obsahu do filmového klipu prostřednictvím třídy MovieClipLoader nejprve vytvořte novou instanci této třídy. Potom pomocí metody loadClip načtěte obsah do cílového filmového klipu. V následujícím příkladu je nový obsah načítán do filmového klipu myContainer.

var myLoader:MovieClipLoader = new MovieClipLoader();
myLoader.loadClip("myExternalMovie.swf", myContainer);

Pokud chcete vědět, zda je obsah načten, použijte s instancí třídy MovieClipLoader obslužnou rutinu události onLoadInit.

var myLoader:MovieClipLoader = new MovieClipLoader(); 
myLoader.addListener(this); 
myLoader.loadClip("myExternalMovie.swf", myContainer); 

function onLoadInit(mc:MovieClip) 
    { 
        trace("content has been loaded into "+mc); 
    }

Pokud chcete mít nad informacemi, které se týkají načítání obsahu do filmového klipu, ještě větší kontrolu, použijte místo metody MovieClip.loadMovie třídu MovieClipLoader. (Tuto obslužnou rutinu události použijte například v případě, že chcete mít možnost kontrolovat průběh načítání.) Další informace o třídě MovieClipLoader najdete v popisu třídy MovieClipLoader v referenční příručce k jazyku ActionScript 2.0.

Poznámka: Třída MovieClipLoader je k dispozici pouze při publikování v aplikaci Flash Player 7 nebo novější.

 Načítání obsahu pomocí relativních cest

Používání relativních cest se třídou Loader a příkazem loadMovie může být zavádějící. Vzhledem k tomu, že akci loadMovie může provádět jakýkoli filmový klip nebo soubor SWF, vyvstává otázka, vzhledem k jaké časové ose je načtený film relativní. Je relativní vzhledem k hlavní časové ose na úrovni _level0? Nebo je relativní k časové ose, ze které byla akce načítání filmu provedena? Odpověď je jednoduchá: Načtené filmy jsou vždy relativní vzhledem k časové ose, ze které byly načteny. Informace o relativních cestách, které se týkají také načítání externích souborů SWF, najdete v článku Nesprávné odkazování na relativní adresy URL | Flash (tn_04157).

Informace týkající se frekvence snímků

Načtený film ve většině případů dědí frekvenci snímků nadřazeného filmu. Například soubor SWF, jehož frekvence je 12 snímků/s, se při načtení do filmu s frekvencí 24 snímků/s, přehrává s frekvencí 24 snímků/s. Jediná výjimka nastává v případě, že načítaný film obsahuje na časové ose zvuk, jehož synchronizace je nastavena na možnost Stream. Pouze pak dědí hlavní film frekvenci snímků načteného filmu, aby bylo zajištěno správné přehrávání tohoto zvuku.

Poznámka: V jazyce ActionScript 3.0 je možné frekvenci snímků kdykoli dynamicky změnit, a to pomocí vlastnosti Stage.frameRate.

Klíčová slova: Flash Player, načíst film; ActionScript; skriptování; úrovně; určení cíle; proměnné; cíl; instance; SWF; loadMovie; tn_14190

Tato práce podléhá licenci Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Na příspěvky ze služeb Twitter™ a Facebook se nevztahují podmínky licence Creative Commons.

Právní upozornění   |   Zásady ochrany osobních údajů online