[转]Flash获取自身swf加载进度的三种方法

[url]http://www.eb163.com/club/thread-16229-1-1.html[/url]

让用户面对苍白的屏幕几十秒,那也一件非常可怕的事情。所以一个好的flash作品(游戏也好,动画好罢),都需要一个好的开头!而这个好的开头就是Loading。可能刚开始学习的时候,cookbook会告诉你,使用Loader对象加载外部swf时,可以监听整个加载的进度。那我们再深入的问一问,如果要获取swf自身的加载进度,又该如何操作呢?

听说之前用as2代码的时候(仅听说),很容易就能实现swf自身的loading。但在as3中,相对有些复杂。那么as3中怎么实现呢?纠结了几天,问了论坛里的一些高手(主要是iicam),查了较多的资料,终于把这个问题搞清楚了。现在帖出来,和各位初学者分享一下。


当然,高手路过,还请多多批评指正。


现在回到正文,如何获取加载进度。

知识点:LoaderInfo类

这个是帮助文档中的解释:LoaderInfo 类可提供有关已加载的SWF 文件或图像文件(JPEG、GIF 或 PNG)的信息。 LoaderInfo 对象可用于任何显示对象。提供的信息包括加载进度、加载程序的 URL 和加载内容、媒体的字节总数以及媒体的标示的高度和宽度。

有2种方式可以访问LoaderInfo对象:
1)访问flash.display.Loader对象的contentLoaderInfo属性;
2)任何一个可显示对象(displayobject)都有loaderInfo属性;

注意:每个SWF文档的主类的实例有loaderInfo属性,每个Loader有loaderInfo属性,同时它有一个contentLoaderInfo属性,通过这个属性你可以访问到Loaded对象的loaderInfo。


那么如何通过这个属性获取加载进度呢?


第一种方法(不推荐)

代码如下:


01.package {

02. import flash.display.MovieClip;

03. import flash.events.*;

04. import flash.text.*;

05. public class loader extends MovieClip {

06. var txt=new TextField();///建立一个TextField实例

07. public function loader() {

08. addChild(txt);/将TextField实例推到舞台

09. loaderInfo.addEventListener(ProgressEvent.PROGRESS,progressHandler);///当进度变化时更新TextField实例的text属性

10. loaderInfo.addEventListener(Event.COMPLETE,completeHandler);///当载入完成后显示内容

11. }

12. function progressHandler(e:ProgressEvent) {

13. txt.text=e.bytesLoaded*100/e.bytesTotal;

14. trace(txt.text);

15. }

16. function completeHandler(e:Event) {

17. //removeChild(txt);//载入完成后移除进度显示文本

18. }

19. }

20.}
复制代码


说明:此方法可能是初学者常见的一个错误。使用此方法,进度数据一出现,就直接到了100%。

有资料说,代码分离项目主时间轴通常只有一帧,而flash会默认在第一帧导出类,并在此之后调用文档类的构造函数,也就是说progress事件的侦听是在加载完成后才起作用,当然看不到进度了!

所以才有了下面两种办法


第二种方法:双文件法(即加壳)

双文件方法,就是使用一个loader.swf加载一个main.swf(主swf文件)。通过这个加载过程来获取main.swf的加载进度。

具体方法:

1、在loader.as中

n new一个Loader实例 loader,并用load方法载入main.swf

n 在 loader.contentLoaderInfo上添加progress和complete侦听

n 在progress处理函数中更新textField,并在complete处理函数将loader.content添加到舞台


2、在main.as中

l 构建舞台内容


第三种方法:双帧法

1、建立loader.as,再建立fla文件,保证主时轴有两帧且都为关键帧(一般都是空白关键帧)

2、在fla中:

l 建立一个空mc,将此mc拖到主场景的第二帧。(注:mc的名称无所谓,可以随便取)

l 这个空mc也设置为二帧关键帧。

l 将库元件中,所以链接类属性中的“在第1帧导出”前面的勾去掉

l 再将库元件中所有的链接类拖入空mc的第二帧

3、在loader.as中


建立textField并推入舞台, 构造函数中为loaderInfo添加progress和complete侦听

在progress处理函数中更新textField,并在complete处理函数中再添加enter_frame侦听

在enter_frame处理函数中构建舞台内容,并移除enter_frame侦听,也就是说让enter_frame处理函数执行一次就可以了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值