Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1703574
  • 博文数量: 358
  • 博客积分: 2180
  • 博客等级: 大尉
  • 技术积分: 1810
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-17 13:47
文章分类

全部博文(358)

文章存档

2016年(17)

2015年(55)

2014年(9)

2013年(67)

2012年(181)

2011年(29)

分类: 系统运维

2011-12-20 14:29:07

AS3中加载的机制
面分别讲述AS3各加载事件与类! 
AS3Loader.rar]相关例子下载 
带swf预览 
一: Loader类 
在AS3.0里把所有事件,属性,加载等都集中在某个对象上了.且加载对象与各触发事件也进行了分工,这和2.0时期,用onEnterFrame和不断检测加载百分比强多了! 
Loader继承了基类DisplayObjectContainer,所以他可以也必须当作一个对象用addChild添加才能工作. 
Loader 类可用于加载 SWF 文件或图像(JPG、PNG 或 静态GIF)文件。 使用 load 方法来启动加载。 被加载的显示对象将作为 Loader 对象的子级添加。 
例: 
var loadimg: Loader = new Loader;
var url:String = http://51xflash.com/images/logo.gif
var urlReq:URLRequest = new URLRequest;
urlReq.url=url;
loadimg.load;
addChild;


和2.0 和比,还有一点区别,这里加载时要先把字符串地址转化为url加载对象,在程序中的第三行是直接设置加载对象的url属性的,也可以这样写urlReq = new URLRequest,除了url属性还有几个公共属性,一般很少用到如:method用来控制get还是post提交方式。 
因为把加载当作一个对象了,所以就不需要象2.0时期一样,新建一个影片来装载加对的物体loadMovie,我们 可以直接设置他的x/y轴或宽高。还有Loader对象是二进制方式加载swf了,在flash9之前我们做加载条是用影片的 getBytesLoaded 和getBytesTotal来检测的是否加载完成。这不是真正意义上的加载,只是判断帧的加载数,所以会出现类似情况,加载到20%停了很久突然跳到 90%因为那一帧放了整个影片70%的数据。以前在蓝色里有讨论过这个话题,还有人说是MM在走江湖!呵,现在解决了! 
Loader的所有方法: 
1. Loader 
创建一个可用于加载文件(如 SWF、JPEG、GIF 或 PNG 文件)的 Loader 对象。 
2. close: void 
取消当前正在对 Loader 实例执行的 load 方法操作。 
3.load:void 
将 SWF、JPEG、渐进式 JPEG、非动画 GIF 或 PNG 文件加载到此 Loader 对象的子对象中。 
4.loadBytes:void 
从 ByteArray 对象中所存储的二进制数据中加载。 
5.unload:void 
删除此 Loader 对象中使用 load 方法加载的子项。 
二: LoaderInfo事件机制 
LoaderInfo非常好用,他是继承EventDispatcher对象用来检测网络加载状态。可以把加载动作细细地解剖出来。 
原来在flash9之前,我们绞尽脑汁去获取加载来的swf的宽度、高度、帧频、版本等数据,但一直没研究出好的方法现在LoaderInfo可以做到能获取加载对象的各属性,这点很好有时用swf来加载不确定swf时很有用,可以用那些属性来重新设置主swf。 
加载对象所加载数据的实时检测上,PROGRESS事件可以取代以前用onEnterFrame的疯狂检测工作。当然2.0的也有自己的事件,只是很少人用! 
LoaderInfo所继承的所有事件: 
1.complete 
成功加载数据后调度。 
2.HttpStatus 
在通过 HTTP 发出网络请求并且 Flash Player 可以检测到 HTTP 状态代码时调度。 
3. Init 
已加载的 SWF 文件的属性和方法可访问时调度。 
4.IoError 
在发生导致加载操作失败的输入或输出错误时调度。 
5.Open 
在加载操作开始时调度。 
6.Progress 
在下载操作过程中收到数据时调度。 
7.Unload 
每次使用 Loader 对象的 unload 方法删除已加载对象时,或者当同一 Loader 对象执行第二次加载并且在加载开始之前删除了原始内容时,由 对象调度。 
具体测试例子请看loadjpg.swf与loadswf.swf 
LoaderInfo的获取swf属性时要等swf加载完才能获取,也就是在COMPLETE事件里获取 
如:

AS版本:AS+the.target.actionScriptVersion+.0swf版本:flash+the.target.swfVersion+.0swf宽:+the.target.width+swf高:+the.target.height)
trace
}

事件触发的各个顺序分别是 
OPEN骨干职工都被开除了! 取代他的是stage,对于场影设置,他是一手遮天了如设置swf全屏,对齐方式,显视品质等。但stage只继承了 DisplayObjectContainer一部分属性,可用的还太少了。 
在做场影加载条时,我们要获取场影的加载情况。要想办法把上面讲的 LoadInfo事件添加到主场景去,用stage是做不到的。但可以用显视类DisplayObject 添加,他继承了 EventDispatcher,可以直接用他的属性指定主场景来添加,DisplayObject和属性和原来的movieClip还是很像的,只是前 面不用加下划线作区分了如:root.loaderInfo.addEventListener 
用root调度loaderInfo:

root.loaderInfo.addEventListener
function loadshow:void


五:使用系统图片与加载条等组件写的加载类

package myAs
private function loadeven:void
private function loadend:void
}
}


使用组件就轻松多了,不用考虑那么多。只是开发出一个适用的产品最好不要去用官方的组件。自己去写过,写过适合自己的组件。不过CS3的Uiloader感觉很不错! 

阅读(2280) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~