Hejsa!
Jeg har et problem med nogle swf som bliver loadet ind. De kører i loop og det gør at browseren stille og roligt æder mere og mere memory.
Jeg har så fundet ud af det nok er fordi jeg skal unloade swf igen.
Lige nu har jeg 5 flash filer.
fil1.swf (loader fil2.swf)
fil2.swf (loader fil3.swf)
fil3.swf (loader fil4.swf)
fil4.swf (loader fil5.swf)
fil5.swf (loader fil1.swf)
Der er 300 frames i alle 5 swf. På frame 300 benytter jeg dette script til at loade den næste swf.
1 2 3 4 5 6 7 8 9 10 11 12 13 | stop(); // Create a new loader context with the application domain as the current // application domain. var addedDefinitions:LoaderContext = new LoaderContext(); addedDefinitions.applicationDomain = ApplicationDomain.currentDomain; // Create the Loader object that will load your external .swf file. var ldr:Loader = new Loader(); var url:String = "fil2.swf"; var urlReq:URLRequest = new URLRequest(url); // Load the .swf file with the new loader context. ldr.load(urlReq,addedDefinitions); addChild(ldr); |
Jeg har forgæves prøvet at lave noget unload efter stop(); som så skulle unloade fil1.swf før den loader fil2.swf ind, men siden jeg er mega noob til AS3 er det ikke lykkedes for mig at lave noget der virkede.
Håber I kan hjælpe mig.
Mvh
Michael
5 kommentarer
Jep problemet er at du ikke gør de swf'er du er færdig med klar til garbage collection. - Og det kan du heller ikke på den måde du har lavet det.
Hvis swf1 loader swf 2 kan du naturligvis ikke unloade swf1 da den jo undeholder swf2, som indeholder swf3 som indeholder swf 4 osv osv.
Du skal have en container som står for loading af de forskellige swf'er, og så kan du dispatche et event på frame 300 som fortæller containeren at den aktive swf er klar til at blive unloadet og den kan loade den næste i køen.
noget i stil med
swf1 på frame 300:
container swf:
Tusind tak for dit svar Ahrengot.
Hav venligst tålmodighed med mig da jeg har lidt svært ved at lure AS stadigvæk.
Jeg har nu lavet følgende.
Sat følgende kode ind i sidste frame(3oo) i:
fil1.swf
fil2.swf
fil3.swf
fil4.swf
fil5.swf
dispatchEvent(new Event(Event.CHANGE));Jeg har så oprette en swf som hedder container.swf
Denne indeholder 1 frame med følgende kode:
Skal jeg sætte noget ind hvor din kommentar er?(//Load ny swf)
Når jeg compiler container.swf før jeg følgende fejl:
1013: The private attribute may be used only on class property definitions.
private function onSwfComplete(e:Event):void1013: The private attribute may be used only on class property definitions.
private function loadNextSwf():voidHåber du kan hjælpe mig videre. Jeg kan stadig ikke lure det
Ahh ja, det var ikke copy-paste kode mere et peg om hvad du kan gøre.
Jeg kan lige uddybe lidt senere i dag hvis jeg når det
Nu har jeg ikke lige testet det, men det her burde virke.
Eksemplet bruger en simpel loader til billeder og swf's jeg har lavet. Den kan du hente her: http://www.ahrengot.com/playground/swfloader.zip