1

我正在尝试获取一个类的实例来加载外部 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

附言

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

我的代码是:

文件 test_as3.swf

外部 as3 swf 文件。

文件 test_tsscreen.fla

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

文件 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);
  }


 }
}
4

1 回答 1

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);
    }
}

}

TSSscreen.as

包 { 导入 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”一书的第 4 章,其中包含对该主题的有用介绍。

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

于 2010-04-15T16:27:11.467 回答