[AS3]As3写的loading(加载文件)监听源代码示例
采用as来加载,一般会有两种方式,一种是加载自身,一种是加载外部的某个对象。As3中的加载都是通过flash.display.Loader 对象来完成的。在加载的过程中,我们可以通过ProgressEvent.PROGRESS或者Event.INIT事件来监视加载进度,在加载完成时可 以调度Event. COMPLETE事件,执行所需要的任务。实际上,以上提到的事件,只是加载的状态。加载的具体数据会被放入 flash.display.LoaderInfo对象中,我们可以通过访问这个对象中的内容得到我们所需要的具体数据。
使用As3加载自身的方法如下:
- root.loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
- root.loaderInfo.addEventListener(Event.COMPLETE, completeHandler);
- function progressHandler (event:ProgressEvent):void {
- trace(“Loading: “+Math.round(event.bytesLoaded/event.bytesTotal * 100)+”%”);
- }
- function completeHandler (event:Event):void {
- root.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progressHandler);
- nextFrame();
- }
对于root,flash会自动加载,无需自己去创建loader对象。其中event.bytesLoaded是已加载的字 节,event.bytesTotal是swf文件的总大小。这些信息都被放在了loaderInfo对象中,可以通过 ProgressEvent.PROGRESS事件来调用。当加载完成时Event.COMPLETE触发,移除对 ProgressEvent.PROGRESS事件的监听。
对于刚开始接触flash的人,需要注意的是:在为自身加载loading的时候,第一帧上需要尽可能的少放东西。而且要在第一针的第一句上加上
stop();
flash的处理机制是完整的加载完这一帧的全部内容后,才去处理as的内容。如果第一帧放的东西过多,处理加载的as就会在很久以后才开始工作,很大程度上就失去使用loading的意义了。库中的元素如果有选择在第一帧导出的话,也会有这样的问题。需要注意。
加载外部的元素,和自身的加载方法,思路上是一致的,只需要创建一个loader来加载即可。
- var request:URLRequest = new URLRequest(“test.png”);
- var loader:Loader = new Loader();
- loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
- loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
- function progressHandler(event:ProgressEvent):void {
- trace(“Loading: “+Math.round(event.bytesLoaded/event.bytesTotal * 100)+”%”);
- }
- function completeHandler(event:Event):void {
- loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, progressHandler);
- addChild(loader);
- }
- loader.load(request);
稍有不同的是与加载相关的事件由 Loader 对象的 contentLoaderInfo 属性引用的 LoaderInfo 对象调度。 contentLoaderInfo 属性设置为有效的 LoaderInfo 对象(即使在加载内容之前),这样就可以在加载前将事件侦听器添加到该对象。加载完成后即可对加载的对象引用和操作了。
关于加载过程中的调试,flash的帮助文档有详细的介绍,现转帖此处,以供参考。
测试文档的下载性能
Flash Player 会尝试满足您设置的帧频;播放期间的实际帧频可能会因计算机而异。 如果正在下载的文档到达了某个特定的帧,但是该帧的所需数据尚未下载,则文档会暂停,直到数据到达为止。
要以图形化方式查看下载性能,可以使用“带宽设置”,它会根据指定的调制解调器速度显示为每个帧发送了多少数据。
在模拟下载速度时,Flash 使用典型 Internet 性能的估计值,而不是精确的调制解调器速度。 例如,如果您选择模拟 28.8 Kbps 的调制解调器速度,Flash 会将实际速率设置为 2.3 Kbps 以反映典型的 Internet 性能。 “带宽设置”还针对 SWF 文件新增的压缩支持进行补偿,从而减少了文件大小并改善了数据流性能。
当外部 SWF 文件、GIF 和 XML 文件以及变量通过使用 ActionScript 调用(如 loadMovie 和 getUrl)流入播放器时,数据将按为数据流设置的速率流动。 在带宽由于出现其它数据请求而减少时,主要 SWF 文件的流速率也会随之降低。 请您计划支持的计算机上以支持的各种速度测试文档,确保文档在设计支持的最慢连接和计算机上都不会出现过载情况。
也可以生成降低回放速度的帧的报告,然后优化或删除这些帧中的某些内容。
要更改使用“测试影片”和“测试场景”命令创建的 SWF 文件的设置,请使用“文件”>“发布设置”。
测试下载性能
1. 请执行下列操作之一:
选择“控制”>“测试场景”或“控制”>“测试影片”。
如果测试场景或文档,Flash 会使用“发布设置”对话框中的设置将当前所选内容发布为 SWF 文件。 SWF 文件会在一个新窗口中打开,并立即开始播放。
选择“文件”>“打开”,然后选择一个 SWF 文件。
2. 选择“视图”>“下载设置”,然后选择一个下载速度来确定 Flash 模拟的数据流速率。 若要输入自定义用户设置,请选择“自定义”。
3. 查看 SWF 文件时,选择“视图”>“带宽设置”,可显示下载性能图表。
“带宽设置”的左侧会显示文档的相关信息、文档设置、文档状态以及流(如果文档中已包括的话)。
“带宽设置”的右侧显示时间轴标题和图表。 在该图表中,每个条形代表文档的一个单独帧。 条形的大小对应于帧的大小(以字节为单位)。 时间轴标题下面的红线指出,在当前的调制解调器速度(在“控制”菜单中设置)下,指定的帧能否实时流动。 如果某个条形伸出到红线之上,则文档必须等待该帧加载。
4. 选择“视图”>“模拟下载”以打开或关闭数据流。
如果关闭数据流,则文档在不模拟 Web 连接的情况下就开始下载。
5. 单击图表上的条形,会在左侧窗口中显示对应帧的设置并停止文档下载。
6. 如有必要,执行以下操作之一,调整图形视图:
选择“视图”>“数据流图表”以显示哪些帧会引起暂停。
默认视图显示交替的淡灰色和深灰色块,代表各个帧。 每块的旁边指出了它的相对字节大小。 第一个帧存储元件的内容,因此它通常大于其它帧。
选择“视图”>“逐帧图表”以显示每个帧的大小。
此视图有助于您查看哪些帧导致数据流延迟。 如有帧块延伸到图表红线之上,Flash Player 将暂停回放,直到整个帧下载完毕。
7. 关闭测试窗口,返回创作环境。
使用“带宽设置”设置测试环境后,就可以直接在测试环境中打开所有 SWF 文件。 文件在 Flash Player 窗口中打开,且在打开时会使用“带宽设置”和其它选定的查看选项。
生成最终报告
1. 选择“文件”>“发布设置”,然后单击“Flash”选项卡。
2. 选择“生成大小报告”。
3. 单击“发布”。
Flash 生成一个扩展名为 .txt 的文本文件。 (如果文档文件为 myMovie.fla,则文本文件为 myMovie Report.txt。) 报告会逐帧列出各帧的大小、形状、文本、声音、视频和 ActionScript 脚本。
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例