Flex SWFLoader 自動卸載外部 SWF 動畫
??
http://bbs.9ria.com/thread-66207-1-1.html 以下便是用 addFrameScript 方式動態在外部 SWF 最後一格加上卸載的命令 <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> <s:layout> <s:VerticalLayout verticalAlign="middle" horizontalAlign="center" /> </s:layout> <mx:SWFLoader id="swfLdr" minWidth="100" minHeight="100"> <mx:complete> <![CDATA[ var mc:MovieClip = swfLdr.content as MovieClip; if (mc) { mc.addFrameScript(mc.totalFrames - 1,swfLdr.unloadAndStop); } ]]> </mx:complete> </mx:SWFLoader> <s:HGroup> <s:Button label="Load Anim 01" click="swfLdr.source = 'Anim01.swf';" /> <s:Button label="Load Anim 02" click="swfLdr.source = 'Anim02.swf';" /> <s:Button label="Load Anim 03" click="swfLdr.source = 'Anim03.swf';" /> </s:HGroup> </s:Application> 實際用不同版本 SWF 測試時 <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> <s:layout> <s:VerticalLayout verticalAlign="middle" horizontalAlign="center" /> </s:layout> <mx:SWFLoader id="swfLdr" minWidth="100" minHeight="100"> <mx:complete> <![CDATA[ import com.codeazur.as3swf.SWF; import com.codeazur.as3swf.tags.TagFileAttributes; if (swfLdr.content is MovieClip) { var mc:MovieClip = swfLdr.content as MovieClip; mc.addFrameScript(mc.totalFrames - 1,swfLdr.unloadAndStop); } else if (swfLdr.content is AVM1Movie) { var swf:SWF = new SWF(swfLdr.content.loaderInfo.bytes); var tagFile:TagFileAttributes = swf.tags[0] as TagFileAttributes; tagFile.actionscript3 = true; var newByte:ByteArray = new ByteArray(); swf.publish(newByte); callLater(swfLdr.load,[newByte]); } ]]> </mx:complete> </mx:SWFLoader> <s:HGroup> <s:Button label="Load Anim 01" click="swfLdr.source = 'Anim01.swf';" /> <s:Button label="Load Anim 02" click="swfLdr.source = 'Anim02.swf';" /> <s:Button label="Load Anim 03" click="swfLdr.source = 'Anim02.swf';" /> </s:HGroup> </s:Application> --------------------------------------------------------------------- 尝试结果: Flex项目工程中,报错: callLater(swfLdr.load,[newByte]); SecurityError: Error #3226: Cannot import a SWF file when LoaderContext.allowCodeImport is false. 修改如下也是同样的错误: ????swfLdr.loaderContext.allowCodeImport = true; 还来改用as手机工程,貌似无法使用SWFLoader和callLater(),修改如下: private var swfLoader:Loader = new Loader(); private function loadComplete(e:Event):void { trace("loadComplete()"); if (swfLoader.content is MovieClip) { trace(swfLoader.loaderInfo.url + "is as3 MovieClip"); var mc:MovieClip = swfLoader.content as MovieClip; mc.addFrameScript(mc.totalFrames - 1,swfLoader.unloadAndStop); } else if (swfLoader.content is AVM1Movie) { trace(swfLoader.loaderInfo.url + "is as2 MovieClip"); var swf:SWF = new SWF(swfLoader.content.loaderInfo.bytes); var tagFile:TagFileAttributes = swf.tags[0] as TagFileAttributes; tagFile.actionscript3 = true; var newByte:ByteArray = new ByteArray(); swf.publish(newByte); var lc:LoaderContext = new LoaderContext(); lc.allowCodeImport = true; swfLoader.loadBytes(newByte,lc); } }不会报错了,但是加载进入了的swf中的as还是无法运行,也无法自动卸载 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |