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),不过除非特别需要,这样已经足够用了.
先看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),不过除非特别需要,这样已经足够用了.
- gamepackage之Loader研究
- gamepackage之LoadQueue
- AS3中Loader类研究
- Android之Loader理解
- xcode之Application Loader
- Android之Loader理解
- qml之Loader使用
- Android之Loader理解
- xcode之Application Loader
- Android 之 loader
- Android之Loader介绍
- QML之Loader学习
- Android之Loader理解
- SQL*Loader之CASE1
- SQL*Loader之CASE2
- SQL*Loader之CASE3
- SQL*Loader之CASE4
- SQL*Loader之CASE5
- 正式发布ObjectARX 帮助文档的.NET版本,欢迎大家下载。
- 大笑有两种情况:一是确实高兴,二是过度悲伤
- 网络语言缩写释义
- 这两天又过去了
- 夏至到了,送上火热照片一组(2005世界小姐、真实的林志玲以及一个超“清凉”的MM)
- gamepackage之Loader研究
- 被阉割的Google
- 掘金3G创业梦
- 成都搜索新人要与百度Google抢市场
- 五子棋禁手判定算法
- windows系统服务优化
- 大内高手—栈/堆
- 向老板反映不满?态度技巧很重要
- 来测试一下!你的职业状态正处于哪一个季节?