如何从实例化子类加载外部swf到主阶段?

时间:2010-04-15 12:38:15

标签: actionscript-3 reference flash load loader

我正在尝试将一个类的实例加载到外部swf并显示它。 到目前为止,我有以下内容: 1)我写了一个使用Loader类加载外部swf“loadExtSWF”的类。 2)我有一个名为“MainSWF.fla”的fla,它使用文档类“MainSWF.as”。 3)我有MainSWF.as文件,实例“loadExtSWF”并调用loadExtSWF.startLoad来加载swf。

这几乎可行。 loadExtSWF的实例加载外部swf,但不显示swf。

如果我用loadExtSWF(它有一个空构造函数)而不是MainSWF替换fla的文档类,并运行loadExtSWF.startLoad,则加载并显示外部swf。

似乎我最初这样做的方式,将swf加载到错误的阶段(?)。

有什么想法吗?谢谢你的帮助。

再见   RaamEE

P.S。

如果将test_tsscreen的文档类从test_tsscreen.as替换为TSScreen.as,并删除test_tsscreen构造函数中的注释,则将加载swf。

我的代码是:

file test_as3.swf

外部as3 swf文件。

file test_tsscreen.fla

fla为空,并将test_tsscreen.as引用为其文档类。

file test_tsscreen.as

package {

 import flash.display.MovieClip;
 import TSScreen;

 public class test_tsscreen extends MovieClip{
  var tsScreen1;

  public function test_tsscreen(){
//   var tsScreen1:TSScreen = new TSScreen(10,10,100,100,0.5,0);
   var tsScreen1:TSScreen = new TSScreen();
   tsScreen1.startLoad(this.stage);
  }
 }
}

文件TSScreen.as

package {
 import flash.display.MovieClip;

 import flash.display.*;
 import flash.net.URLRequest;
 import flash.system.ApplicationDomain;
 import flash.system.LoaderContext;

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

 public class TSScreen extends MovieClip implements ITSScreenable{


  public function TSScreen():void{
//   startLoad(this); //Look important comment in above text
  }


  function startLoad(_this:Stage) {
   var mLoader:Loader = new Loader();
   var mRequest:URLRequest = new URLRequest("test_as3.swf");

   mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
   mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
   _this.parent.addChild(mLoader);
   mLoader.load(mRequest);
   trace(this.name);
   trace(_this.name);
  }

  function onCompleteHandler(loadEvent:Event) {
   addChild(loadEvent.currentTarget.content);
  }

  function onProgressHandler(mProgress:ProgressEvent) {
   var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal;
   trace(percent);
  }


 }
}

1 个答案:

答案 0 :(得分:2)

有时候,提出问题会导致找到答案。再次阅读本手册之后,我看到一旦在AS3中添加新的swf,您需要将新的DisplayObject作为子项添加到现有DisplayObjectContainer中的现有DisplayObject。

所以,我遇到的问题是我正确加载了外部swf,但是没有将它添加到DisplayList中,因此没有显示。

这是我之前引用的代码块的固定版本

test_tsscreen.as

包{

import flash.display.MovieClip;
import TSScreen;

public class test_tsscreen extends MovieClip{
    var tsScreen1:TSScreen;

    public function test_tsscreen(){
        tsScreen1 = new TSScreen(10,10,100,100,0.5,0);
        //tsScreen1 = new TSScreen();
        this.addChildAt(tsScreen1,1);
    }
}

}

TSScreen.as

包{     import flash.display.MovieClip;

import flash.display.*;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;

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

public class TSScreen extends MovieClip {
    private var _xPos:int;
    private var _yPos:int;
    private var _width:int;
    private var _height:int;
    private var _xScale:int;
    private var _yScale:int;

    private var _visible:Boolean;
    private var _alpha:Boolean;
    private var _shadow:Boolean;
    private var _backgroundColor:uint;
    private var _rotation:Boolean;

    private var _displayTime:int;


    public function TSScreen():void{
        startLoad();
    }


    function startLoad() {
        var mLoader:Loader = new Loader();
        var mRequest:URLRequest = new URLRequest("C:/FlashProjects/test_as3.swf");

        mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
        mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
        addChild(mLoader);
        mLoader.load(mRequest);
    }

    function onCompleteHandler(loadEvent:Event) {
        addChild(loadEvent.currentTarget.content);
    }

    function onProgressHandler(mProgress:ProgressEvent) {
        var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal;
        trace(percent);
    }


}

}

如果您想了解更多信息,请参阅“FriendsofED Foundation Actionscript 3.0 With Flash CS3”一书的第04章,其中包含有关该主题的有用介绍。

希望这可以帮助其他人解决同样的问题。