Flex中对swf文件的操作
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 =? newUIComponent();
private var loader:Loader = new Loader();
private var context:LoaderContext =? newLoaderContext();
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();? //调用垃圾回收方法;
?
?如有不当之处请批评指正。