2011-05-18 73 views
0

我正在构建一个具有文档类“Main”的FLA文件,并在其构造函数中告诉它跟踪(stage)。我添加了一个外部预加载器来加载这个SWF,但是你知道什么,trace语句显示为NULL。External Preloader原因TypeError

这是目前正在工作的预加载器。

import flash.display.Loader; 
import flash.events.ProgressEvent; 
import flash.events.Event; 
import flash.net.URLRequest; 

var l:Loader = new Loader(); 
l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); 
l.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); 
l.load(new URLRequest("Main.swf")); 

function onProgress(e:ProgressEvent):void { 
    preloader.mask.height = (e.bytesLoaded/e.bytesTotal) * preloader.lemon.height; 
} 

function onComplete(e:Event):void { 
    removeChildAt(0); 
} 

对于自身的main.swf这里是文档类:

package { 

    import Position; 
    import flash.display.*; 
    import flash.events.Event; 

    public class Main extends MovieClip { 

     public function Main():void { 
      trace(stage); 
     } 
    } 
} 

//// ///解决我 忘了给项目添加到阶段,但幸运的是,在菲利普的代码我看到了这个。所以,只要记住Event.COMPLETE触发时,将加载器的内容添加到阶段,否则swf的文档类将显示为空。

回答

3

你必须等到你的主类被添加到舞台(Event.ADDED_TO_STAGE)。预加载器现在是舞台所有者...

如果您正在通过加载程序加载外部SWF,则必须先等待Event.INIT,加载完成后由加载程序激发您的构造函数加载的swf被执行。如果您将加载器内容添加到显示列表中,则也会触发ADDED_TO_STAGE事件。在将显示对象添加到舞台之前,stage属性为null。

ldr //your loader 

ldr.loaderInfo.addEventListener(Event.INIT,foo); ldr.load();

function foo(e:Event):void {content:* e.target.content; addChild(content); }

+0

我只是将此行添加到构造函数“addEventListener(Event.ADDED_TO_STAGE,go);”所以它会调用该功能“去”,然后我在“去”跟踪语句,仍然没有,为什么? – 1337holiday 2011-05-18 06:27:51

+0

是否可以在代码中编辑追踪舞台的代码?我一直在努力几个小时.... – 1337holiday 2011-05-18 06:29:20

+0

嗯,我明白了,那么我该如何将加载程序的内容添加到显示列表?林这样的小白在这.... – 1337holiday 2011-05-18 06:39:00