Flex SWFLoader 自動卸載外部 SWF 動畫
来源:互联网 发布:java语言入门培训班 编辑:程序博客网 时间:2024/06/05 17:40
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 測試時
會發現到以上的方式只對 AS3 版的 SWF 有效即便外部 SWF 內沒有任何程式
遇到了 AS1, 2 的 SWF,content 類別就會變成了 AVM1Movie
不能使用 addFrameScript,也沒有任何影格事件或屬性可以用~
後來想到最近出現的一個 AS3 Open Source Lib. - as3swf
它可以用 AS3 動態操作 SWF Binary 資料
可以動態修改 SWF Metadata、Atributes、影格資料、點陣圖資料....
不過我只需要用到它 0.1% 的功能而已 - 將 SWF 改為 AS3 版本
稍微修改上面程式,利用 as3swf 修改外部 SWF AS 版本
<?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;
swfLdr.loaderContext.applicationDomain = ApplicationDomain.currentDomain;
swfLdr.loaderContext.allowLoadBytesCodeExecution = true;
trace("allowCodeImport: "+swfLdr.loaderContext.allowCodeImport);
callLater(swfLdr.load, [newByte]);
还来改用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还是无法运行,也无法自动卸载
- Flex SWFLoader 自動卸載外部 SWF 動畫
- flex SWFLoader 访问 SWF 交互 的方法
- Flex SWFLoader加载SWF和元件,控制SWF
- FLEX swfloader
- FLEX调用外部SWF的函数
- Flex控制外部加载的swf文件[外部swf文件flex版]
- SWFLoader加载swf,并且调用其方法
- flex加载外部swf文件[flex-swf and flash as3 swf],并且互相通讯-加强原来的帖
- flex加载外部swf文件,并且互相通讯
- flex加载外部的swf,取得swf内容的实际宽度和高度
- Study Flex《SWFLoader实现任意缩放》
- SWFLoader: the size of SWF document and content
- Flex 从外部载入swf文件,并操作。(皮肤制作)
- Flex开发中如何给SWF传递外部提供的参数
- 加载外部的swf
- 用外部SWF
- 关于flex的swf
- Study Flex《swf文件格式》
- ORACLE事物隔离级别
- Mongodb java代码
- sql取得不包含某数据的字段。。。not in
- JZ4770 UBOOT阅读 (MIPS)
- Web开发者不容错过的20段CSS代码
- Flex SWFLoader 自動卸載外部 SWF 動畫
- 【Vim使用】3.NERDTree
- 百度Echarts 全国省市地图 动态数据图形报表
- Nagios短信报警功能通过飞信实现
- css3 线性渐变和径向渐变样式
- Nagios微信报警
- IOS7 TableView适配
- 今天我们为什么不成功
- sql表复制,怎么把一个表中的数据复制到另一个表中呢