gamepackage之Loader研究

来源:互联网 发布:有什么软件找驴友靠谱 编辑:程序博客网 时间:2024/04/28 20:47
闲来无聊研究了一下gamepackage里面的一个Loader和LoadQueue...发现作者确实是太牛X了,我已经对他pf的5体趴地了....


先看class Loader,作者没有用Flash自带的MovieClipLoader来实现,而是自己写了一个算法,估计是为了兼容他自己的框架吧.
看代码,不去管里面的细节,像implements Executeable还有 Impulse.connect(this)...等这些都是作者整个package框架的实现.

首先构造函数中,定义了一些必要的参数.并且使用了隐藏的AsBroadcaster来广播一些事件.这里是关键,等下到LoadQueue的时候可以看到作者的巧妙运用.

load方法,就是一个下载的开始.

接着私有的loadClip方法,就是作者自己写的一个loading算法模拟MovieClipLoader(简称MCL)的,要好好研究一下,可以看出作者对flash的雄厚造诣.

其中mode==1时候的判断,是判断下载的文件是否已经被连接到,如果连接到了,说明 容器._url和下载文件的url肯定一样了,那这个时刻正好就是,文件被正确连接到的时候.广播onLoaderRequest事件.在MCL里这个事 件就是onLoadStart.这个技巧很棒...

当正确连接到文件后,估计flash player要获得加载文件的总大小,在获得之前totalbytes是等于-1的.所以先判断是否等于-1,当大于-1了,说明文件真正开始下载了.这 个时候广播onLoaderStart.在MCL中,没有准确的这个事件,可能MM的人没想过要这么精细.因为在准确连接到文件的时候,已经可以对容器做 初始操作了.

用过loadMovie的人应该都知道,容器在loadMovie之前,指的还是主文件中的mc.如果这个时候给mc定义一些属性值,在loadMovie之后之前定义的属性值都没有了.
最好的办法是在外部swf加载进来时再对容器进行一些属性的定义.
那什么时刻容器才开始等于外部的swf了呢?记得以前,我只是判断 容器.getBytesTotal,但getBytesTotal这个函数很是莫名,比如在没有loadMovie时,一个mc的 getBytesTotal等于0,而如果在loadMovie请求连接时,又等于-1,连接到了后,一开始几帧又是0,反正和网速有很大的关系,实在没 法准确判断,而作者使用_url来判断,无疑要比getBytesTotal来的准确清晰.


接下去的都是常规判断了,而当mode==4的时候,作者的判断好像缺乏实际意义,我测试下来.作者的onLoaderComplete和 onLoaderInit事件触发的情况都差不多.而MCL中onLoadComplete和onLoadInit就很明显区别,MCL中的 onLoadComplete是在外部swf文件完成加载后,第一帧还没有任何执行前.
执行AS步骤是
MCL.onLoadComplete
外部SWF第一帧AS
MCL.onLoadInit
可以说MCL在下载完结时刻的判断要更精确.

作者毕竟是在Flash的基础上写的.没有MCL那么强大(flash8的话,MCL在onLoadError的时候能给出httpStatus),不过除非特别需要,这样已经足够用了.
原创粉丝点击