我正在尝试将一个类的实例加载到外部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。
我的代码是:
外部as3 swf文件。
fla为空,并将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);
}
}
}
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);
}
}
}
答案 0 :(得分:2)
有时候,提出问题会导致找到答案。再次阅读本手册之后,我看到一旦在AS3中添加新的swf,您需要将新的DisplayObject作为子项添加到现有DisplayObjectContainer中的现有DisplayObject。
所以,我遇到的问题是我正确加载了外部swf,但是没有将它添加到DisplayList中,因此没有显示。
这是我之前引用的代码块的固定版本
包{
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);
}
}
}
包{ 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章,其中包含有关该主题的有用介绍。
希望这可以帮助其他人解决同样的问题。