Vanuit een Flash SWF-bestand kunt u andere externe SWF-bestanden laden als elementen. Er bestaan verschillende redenen om externe SWF-bestanden te laden:

  • Omdat een project in meerdere films kan worden gesplitst, zijn de individuele SWF-bestanden kleiner in grootte. Kleinere bestanden laden sneller en beheren het geheugen op efficiëntere wijze.  
  • U hebt de mogelijkheid alleen de inhoud te laden die u nodig hebt op basis van wat de gebruiker in uw film doet.
  • Meerdere SWF-bestanden kunnen achter elkaar worden afgespeeld zonder dat de browser nog een HTML-pagina moet laden. Pauzeren of vernieuwen is voor de pagina's niet gekoppeld aan opnieuw laden.
  • U hebt meer flexibiliteit voor de organisatie van uw projectelementen.
  • Een complexe gebruikersinterface kan worden gemaakt die niet afhankelijk is van één SWF-bestand. Veel SWF-bestanden kunnen worden gecombineerd om de interface te maken. Wanneer u SWF-bestanden combineert, wordt het bewerken vereenvoudigd omdat een individueel, kleiner SWF-bestand kan worden gewijzigd zonder dat dit van invloed is op de andere delen van de interface.
  • Meerdere auteurs kunnen samenwerken aan hetzelfde project door aan aparte FLA-bestanden te werken.

Het plaatsen van inhoud in een apart SWF-bestand is te vergelijken met het plaatsen van inhoud in het filmclipsymbool. Het verschil is dat de inhoud buiten het SWF-hoofdbestand bestaat. U kunt bovendien afbeeldingsbestanden laden, zoals JPG, PNG, GIF.

Gebruik een van de volgende opties om een extern SWF-bestand vanuit een andere SWF-bestand te laden:

  • De klasse Loader van ActionScript 3.0
  • De opdracht loadMovie van ActionScript 2.0
  • De klasse MovieClipLoader van ActionScript 2.0

De klasse Loader van ActionScript 3.0 gebruiken

De klasse Loader in ActionScript 3.0 is een subklasse van DisplayObject die u kunt gebruiken om externe inhoud te laden en weergeven. Gebruik de methode load van de klasse om het SWF-bestand te laden. De methode load heeft één vereiste parameter, een URLRequest-exemplaar met het URL-adres van de te laden inhoud.

Het volgende codevoorbeeld maakt een Loader-exemplaar en laadt een extern SWF-bestand genaamd 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%

De URL van het SWF-bestand dat wordt geladen, kan relatief of absoluut zijn. Zie Relatieve paden hieronder voor meer informatie over hoe Flash Player URL's verwerkt. Voor meer informatie over de klasse Loader raadpleegt u Loader in de Platform ActionScript-taalreferentie.

Verwijzingen naar root geven (indien beschikbaar) altijd het bovenste weergaveobject weer in het gedeelte van de boomstructuur van de weergavelijst dat door dat SWF-bestand wordt vertegenwoordigd. (Voor afbeeldingen verwijst root naar het bitmapobject.)

Opmerking: in ActionScript 3.0 bestaat geen equivalent voor de eigenschap _lockroot of _level van ActionScript 2.0. Zie Basiskennis van weergaveprogrammering in de ActionScript 3.0-ontwikkelaarshandleiding.

De opdracht loadMovie van ActionScript 2.0 gebruiken

Met de opdracht loadMovie laadt u een extern SWF-bestand of afbeelding in een filmclip of ander niveau van de bovenliggende film in ActionScript 2.0.

De opdracht loadMovie heeft twee verschillende vormen:

  • Methode MovieClip.loadMovie: De methode MovieClip wordt gebruikt voor het laden van externe inhoud in een specifieke filmclipexemplaar.
  • Algemene functie loadMovie: De algemene functie loadMovie kan worden gebruikt om inhoud in films of niveaus te laden. De algemene versie heeft ook twee varianten, loadMovie en loadMovieNum. Met de eerste variant laadt u inhoud in films of niveaus en met de tweede (loadMovieNum) laadt u specifiek in niveaus.

MovieClip.loadMovie

Wanneer u externe inhoud in filmclipexemplaren laadt, is het raadzaam de methodeversie MovieClip van loadMovie te gebruiken. Deze versie wordt rechtstreeks uit de filmclip opgeroepen waarin u de inhoud wilt laden en hieraan wordt de URL van de inhoud doorgegeven.

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

De URL van de inhoud die wordt geladen, kan relatief of absoluut zijn. Zie Relatieve paden hieronder voor meer informatie over hoe Flash Player URL's verwerkt.

Wanneer de inhoud is geladen, wordt deze weergegeven in de filmclipcontainer. De locatie en andere basiseigenschappen van de filmclipcontainer worden behouden. Aangepaste eigenschappen of functies die in de filmclipcontainer zijn gedefinieerd, bestaan echter niet meer. De nieuwe inhoud vervangt alle eerdere inhoud (inclusief code- en gebeurtenishandlers zoals onRelease). Daarom mislukken pogingen om een onLoad-gebeurtenishandler te gebruiken. Gebruik in dit geval de klasse MovieClipLoader (zie hieronder). Voor meer informatie over MovieClip.loadMovie raadpleegt u MovieClip.loadMovie in de ActionScript 2.0-taalreferentie.

Algemene loadMovie en loadMovieNum

De opdracht loadMovie bestaat ook als een algemene functie. Deze functie heeft twee vereiste parameters, de URL van de externe inhoud en het doel waarin de inhoud wordt geladen. De doelparameter kan een tekenreeks of een verwijzing zijn. De volgende regels zijn een equivalent van het laden van 'myExternalMovie.swf' in het filmclipexemplaar genaamd myContainer:

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

loadMovie kan bovendien inhoud laden in verschillende niveaus van de Flash Player. Niveaus in Flash Player zijn net als spelerlagen. Meerdere films kunnen in hetzelfde exemplaar van Flash Player worden afgespeeld, zonder dat ze in elkaar worden genest. Elk niveau staat voor een unieke root waar films onafhankelijk van films in andere niveaus kunnen worden afgespeeld (_lockroot hoeft niet te worden gebruikt).

U kunt verwijzen naar niveaus in ActionScript via _level gevolgd door een nummer dat voor het niveaunummer staat. De eerste film die in Flash Player wordt geladen, bevindt zich op _level0. Extra niveaus kunnen boven op dat niveau worden toegevoegd. Met de volgende aanroep van loadMovie wordt 'myExternalMovie.swf' geladen in niveau 1 boven op de film die momenteel wordt afgespeeld in de speler.

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

Een variant van de algemene functie loadMovie is loadMovieNum. Deze methode is vergelijkbaar met loadMovie, behalve dat deze alleen gericht is op niveaus en dit doet op nummer, niet op naam. Gebruik deze regel als u bijvoorbeeld een extern SWF-bestand in niveau 1 (_level1) wilt laden:

loadMovieNum("myExternalMovie.swf", 1);

Wanneer u in niveaus laadt, is het raadzaam dat u loadMovieNum over loadMovie gebruikt. Voor meer informatie raadpleegt u algemene loadMovie in de ActionScript 2.0-taalreferentie.

_lockroot gebruiken om _root-conflicten te voorkomen

Wanneer u een externe film in een andere film laadt, wordt de verwijzing _root van de geladen filmclip gewijzigd van de hoofdtijdlijn naar de tijdlijn van de film die de clip heeft geladen. Met andere woorden: _root verwijst altijd naar de bovenste tijdlijn in de hiërarchie. Als u niet wilt dat _root naar de bovenste tijdlijn verwijst, stelt u de eigenschap _lockroot van de hoofdtijdlijn van de geladen filmclip op true in. Deze eigenschap vertelt alle onderliggende elementen van die tijdlijn dat wanneer ze naar _root verwijzen, ze naar die tijdlijn moeten verwijzen.

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

Opmerking: de eigenschap _lockroot is alleen beschikbaar bij publicatie naar Flash Player 7 of later.

 De klasse MovieClipLoader van ActionScript 2.0 gebruiken

De klasse MovieClipLoader in ActionScript 2.0 is ontworpen om het proces voor het laden van externe inhoud in filmclipexemplaren gemakkelijker te maken. Zoals eerder vermeld, worden variabelen en functies die zijn gedefinieerd in filmclips, verwijderd wanneer nieuwe inhoud in die filmclips wordt geladen. Callbacks zoals onLoad zijn niet mogelijk. De MovieClipLoader omzeilt deze beperking echter door als een surrogaat te werken voor zulke gebeurtenissen. U maakt aparte exemplaren van MovieClipLoader om het laden van inhoud in een andere filmclip te beheren. Daardoor worden variabelen of functies in die filmclip niet verwijderd.

Wanneer u inhoud in een flimclip laadt via de klasse MovieClipLoader, maakt u eerst een nieuw exemplaar van de klasse. Vervolgens gebruikt u loadClip om inhoud in een doelfilmclip te laden. In het volgende voorbeeld wordt de nieuwe inhoud geladen in de filmclip myContainer.

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

Als u wilt weten of de inhoud is geladen, gebruikt u een onLoadInit-gebeurtenishandler met uw MovieClipLoader-exemplaar.

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

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

Wanneer u meer controle wilt hebben over de informatie met betrekking tot het laden van inhoud in een filmclip, gebruikt u de klasse MovieClipLoader in plaats van MovieClip.loadMovie. (Gebruik deze gebeurtenishandler bijvoorbeeld wanneer u het laadproces wilt controleren.) Voor meer informatie over de klasse MovieClipLoader class, raadpleegt u MovieClipLoader in de ActionScript 2.0-taalreferentie.

Opmerking: de klasse MovieClipLoader is alleen beschikbaar bij publicatie naar Flash Player 7 of later.

 Relatieve paden gebruiken om inhoud te laden

Het gebruik van relatieve paden met Loader en loadMovie kan verwarrend zijn. Omdat de tijdlijn van een SWF-bestand of filmclip een loadMovie-actie kan uitvoeren, moet u zich afvragen ten opzicht van welke tijdlijn de film wordt geladen. Is deze relatief aan de hoofdtijdlijn op _level0? Of is deze relatief aan de tijdlijn die de film heeft geladen? Het antwoord is simpel: geladen films zijn altijd relatief aan de tijdlijn die de films heeft geladen. Zie Onjuiste verwijzingen naar relatieve URL's | Flash (tn_04157) voor een bespreking van relatieve paden, wat ook relevant is voor het laden van externe SWF-bestanden.

Framesnelheid

In de meeste gevallen neemt een geladen film de framesnelheid van de bovenliggende film over. Bijvoorbeeld een SWF-bestand met een framesnelheid van 12 fps, wordt afgespeeld met 24 fps wanneer het bestand wordt geladen in een film met een framesnelheid van 24 fps. De enige uitzondering is als de film die wordt geladen, een geluid op de tijdlijn bevat waarvan de synchronisatie is ingesteld op 'stream'. Alleen dan neemt de hoofdfilm de framesnelheid van de geladen film over zodat dat geluid juist wordt afgespeeld.

Opmerking: met ActionScript 3.0 kunt u de framesnelheid dynamisch wijzigen via de eigenschap Stage.frameRate.

Trefwoorden: Flash Player, film laden; ActionScript; scripting; niveaus; doel bepalen; variabelen; doel; exemplaar; SWF; loadMovie; tn_14190

Dit werk is gelicentieerd onder de Creative Commons Naamsvermelding/Niet-commercieel/Gelijk delen 3.0 Unported-licentie  De voorwaarden van Creative Commons zijn niet van toepassing op Twitter™- en Facebook-berichten.

Juridische kennisgevingen   |   Online privacybeleid