简体   繁体   中英

Loading SWF in AS3 but flash keeps repeating constructor function, what should I do?

I am importing several external files using the Loader-class, and one of them is an swf-file. When doing so (I had done it successfully before, so did not expect any issues), I ran into all sorts of errors, and finally Flash crashed.

I put down a trace in the constructor function, and it didn't trace just once, but kept on tracing, suggesting that the constructor was stuck on loop. I guess the loading of too many of the same swf is what causes flash to eventually crash.

Here is my code (the swf im loading is now a simple test-file which contains an image and no code):

    private var slides:Loader = new Loader();

    public function DocumentClass()
    {
        trace(1)
        slides.load(new URLRequest("Resources/Slides.swf"));
        slides.contentLoaderInfo.addEventListener(Event.COMPLETE, SlidesComplete);
    }


    public function SlidesComplete(evt:Event):void
    {
        slides.contentLoaderInfo.removeEventListener(Event.COMPLETE, SlidesComplete);
        addChild(slides);
    }

This traces "11111111111..." and everything dies in the end.

HELP!

Try putting a stop() action at the top of the swf you load in (either in actionscript, or on the timeline). It's possible that the swf is being loaded in and is running a play and running on loop in the mean time (hence your code running over and over).

I would do a progress watch until the swf is fully loaded, then jump to your display frame:

  • Create a section for loading (your choice if you want to use a preloader)
  • Create another section (set of keyframes) for loaded content. I use keyframes because it's easy, but you could also wait to instantiate classes until loading is complete.

Below is a snippet I occasional build from:

// stop the playhead from moving ahead
stop(); // you can also use gotoAndStop("loading"); if you want

function loaderProgressHandler(event:Event):void {
    // switch the framehead to main which will show your content
    if(event.bytesLoaded >= event.bytesTotal) {
        event.target.removeEventListener(Event.PROGRESS, this.loaderProgressHandler);
        this.gotoAndStop("main");
    }
}

this.loaderInfo.addEventListener(Event.PROGRESS, this.loaderProgressHandler);

Hope that helps !

I was just stuck on this same problem.

In my case it turned out that the problem was down to the swf having the same document class name as the swf that was loading it.

eg. Main.as was loading another swf that also had its document class called Main.as - Changing this to anything else solved the infinite loop.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM