第一类: Flex中操作 fla格式或as格式文件生成的swf;
相关代码如下
<mx:SWFLoader id="swfLoader" source="[加载的swf文件]" complete="swfComplete(event)" />
private var swfObj:Object;
private function swfComplete(evt:Event):void{
//对swfObj赋值,通过操作swfObj来控制加载的swf文件;
swfObj = SWFLoader(evt.target).content;
}
第二类: Flex中操作 mxml格式生成的 swf;
<mx:SWFLoader id="swfLoader" source="[加载的swf文件]" complete="swfComplete(event)" updateComplete="swfUpdateCom(event)" />
private var swfObj:Object;
private var swfSM:SystemManager;
private function swfComplete(evt:Event):void{
swfSM = SystemManager(SWFLoader(evt.target.content));
//在这里不能直接对 swfObj进行赋值,因为此时 swfSM.application 的值为 null;
}
private function swfUpdateCom(evt:Event):void{
//对swfObj赋值,通过操作swfObj来控制加载的swf文件;
if(swfSM!=null && swfObj==null){
swfObj = swfSM.application;
}
//假如要在子swf中调用主swf函数需要在 子swf中设置一个Object类型的变量,给此变量赋值
if(swfObj!=null){
// _parentObj 是子swf中变量,可以通过它来调用主swf属性及函数;
swfObj._parentObj = this;
}
}
操作加载swf文件的前提:知道swf文件内的公有属性和方法名;
Flex中使用Flash类库中的元件
private var swfUrl=""; //库资源地址
private var ui:UIComponent = new UIComponent();
private var loader:Loader = new Loader();
private var context:LoaderContext = new LoaderContext();
private function init():void{
//指定为当前域;
context.applicationDomain=ApplicationDomain.currentDomain;
//加载外部的swf库 loader.load()中的第2个参数 用来确定是否能使用加载的SWF中的库;
loader.load(new URLRequest(swfurl), context);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
}
private function onComplete(evt:Event):void{
//得到类
var classByName:Class = ApplicationDomain.currentDomain.getDefinition("元件名" ) as Class;
var mc:MovieClip = new classByName(); //从库中导出资源
mc.x = 300;
mc.y = 300;
//添加到场景中;
ui.addChild(mc);
this.addChild(ui);
}
在加载 swf 过程中 会出现 内存泄露的情况;
解决方法:
swfLoader.unloadAndStop(); //加载前先卸载;
System.gc(); //调用垃圾回收方法;
如有不当之处请批评指正。