• 一个SWF加载另一个SWF时,先看下我们用的加载代码:
  • AS3代码
1. var loadSwf:Loader = new Loader;   
2. loadSwf.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCom)   
3. loadSwf.load(new URLRequest("demo.swf"))   
4. private function loadCom(event:Event):void {   
5.     var loadInfo:LoaderInfo = event.target as LoaderInfo;   
6.     var getSwf:DisplayObject = loadInfo.content as DisplayObject;   
7.     stage.addChild(getSwf);   
8. }
  1.  
  • 报错情况有以下几处:
  • 1.显示对象根目录错误
  • 有 些人为图方便,直接在把Loader对象用addChild()添加到舞台上,这是错误的,因为有些子SWF的程序在文档类中,把parent看成是 stage,而直接添加Loader对象,子SWF中的parent就是Loader了,Loader相当于另一个容器,而导致子SWF执行不正常.
  • 解 决方法:看看上面的加载代码,已经是解决方法了,第六行,我们获得的getSwf其实是一个文档类的实例化,因为文档类必须继承 DisplayObject的,所以获取的类型为DisplayObject是肯定正确的.我们把文档类直接添加到stage中,这样就保证了与原SWF 的结构一致.
  • 2.加载进来提示无法访问空对象引用的属性或方法.
  • 这是因为子SWF还没有添加到舞台上就调用stage了,这时stage是null值,所以提示这个错误.
  • 解决方法:在子SWF的构造函数中,添加到舞台上再执行代码.

 

  • AS3代码
1. public function Main(){//构造函数
2. if (stage!=null){   
3.          init();   
4. }else{   
5.         addEventListener(Event.ADDED_TO_STAGE, init);      
6. }}   
7. private function init(e:Event = null):void {      
8. //你的代码在这执行      
9. }
  1. 注意:在加载的时候对stage的访问要慎重,在父swf调用子swf的时候子swf的stage是不能为空的,(因为子swf会指向 loader.swf 的 stage
    ,在addChild前就调用stage是不成功的)。
  2. 在 群里闪侠给的意见是:一个简单的原则:除了keyboardEvent事件等必须在stge上侦听的事件,其他的不要在stage上侦听,否则就破坏了封 装性。还有被访问的始终只有一个stage,而且是父的stage,Stage只有一个,而且无法实例化(它是是一种很奇怪的显示对象)
  3. 还有:7行为什么是Event = null?????因为 :有=null的时候可以直接调用这个方法,不用带参数
    没有=null的时候,必须是促发了你的event才会去调用这个方法,是按照默认的值来传递的不赋值是eventHandler(event:Event):void{}
    那又如何取到你加载的子swf里的一个影片剪辑呢?----》子swf.content["影片剪辑.name"],就OK了........