Navigation

Previous

Archives

2007年6月22日 @ 11:57

aas3 loader

 
loader
loader类用来载入swf,或者图片等外部资源。loader类和as2的MovieClipLoader类不同,loader类自身就有一个容器用来装载被载入的文件
这个容器作为唯一的child被添加进loader类里,所以虽然loader类也是继承自displayObject,但是如果想调用loader类的addChild(),
addChildAt(),removeChild(),removeChildAt()等操作child的方法,将会抛出异常。如果要移除载入的文件,只能调用loader类的unload
方法,或者再loader类被添加的父级调用removeChild将整个loader实例移除掉。
[代码片段]
试图将其他对象添加到loader类里:
var l:Loader=new Loader();
var s:Sprite=new Sprite();
var g:Graphics=s.graphics;
g.drawRect(0,0,100,100);
l.addChild(s);
[代码片段]
试图使用removeChild方法移除加载的文件:
var l:Loader=new Loader();
l.contentLoaderInfo.addEventListener(Event.INIT,init);
l.loader(new URLRequest("test.swf"));
function init(e){
l.removeChild(l.content);
}
[代码片段]
正确移除加载的文件:
var l:Loader=new Loader();
l.contentLoaderInfo.addEventListener(Event.INIT,init);
l.loader(new URLRequest("test.swf"));
addChild(l);
function init(e){
l.unload();
//or
removeChild(l);
}
使用loader类和以往的as2一样也需要注意跨域的问题。比如将网路上的文件载入本地,载入的文件和载入容器不再同一域下,对于位
于不同的安全沙箱的情况,可以使用System.allowDomain()或者System.allowInsecureDomain(),对于不同域的网络资源,可以通过
放置策略文件来解决。另外也不允许as3载入as2编写的swf,反之亦然。文档里提供的解决方案是使用LocalConnection类。

由于loader类的父类是DisplayObjectContainer,所以它拥有的属性和sprite差不多,只有里面的content和contentLoaderInfo需要
了解一下。
content就是loader的唯一child也是载入文件的容器,值得注意的是如果载入的是swf那么它就等同于这个被载入的swf的documentCalss。
[代码片段]
被载入的swf的documentClass:
package{
public class A extends Sprite{
public function A(){
}
public function saySomeThing(){
trace("i am documentClass");
}
}
}
装载的swf代码:
var l:Loader=new Loader();
l.contentLoaderInfo.addEventListener(Event.INIT,init);
l.loader(new URLRequest("test.swf"));
function init(e){
l.content.saySomeThing();
}

contentLoaderInfo包含了载入文件的信息和loader的状态的等信息(具体参看flash.display.LoaderInfo)。所以loader本身没有事件,它的事件是通过contentLoaderInfo来添加
监听的,从contentLoaderInfo广播出的事件包括:
complete:Event                          文件载入完成时触发
httpStatus:HTTPStatusEvent                获取到http文件头时触发
init:Event                                文件载入完成并初始化后触发
ioError:IOErrorEvent                      文件读取错误时触发
open:Event                                开始执行load操作时触发
progress:ProgressEvent                    文件读取进度
securityError:SecurityErrorEvent          沙箱安全冲突时触发
unload:Event                              卸载文件时触发

loader自身的方法只有4个。分别是:
load(request:URLRequest, context:LoaderContext = null)
load方法里文件地址接受的是一个URLRequestle类型参数,URLRequest类将所有的信息都包装再一个http请求里。第2个参数定义了关于沙箱安全的一些设置。具体参看(flash.system.LoaderContext)
loadBytes(bytes:ByteArray, context:LoaderContext = null)
loadBytes可以载入2进制数据并自动根据类型进行显示(如果是png,jpg,gif或者swf的话)
colse()
当loader类还在载入文件过程中的时候,调用这个方法可以放弃载入
unload()
将使用load方法载入的文件移除掉

Share

Filed under: 资料 · Tags: as3  loader  

Articles related:

AS3组件 dzq.controls.ScrollBarAt  (2007-6-21 23:36:59)

stage 无法响应resize事件问题  (2007-6-19 17:59:23)

[AS3]LRC类-用于加载和处理lrc歌词  (2007-6-19 10:46:56)

[AS3]常用数据集合类(Map,Queue,Stack)  (2007-6-19 10:42:34)

ActionScript 3.0 Display Lists and Display Objects  (2007-6-15 10:30:52)

ActionScript 3.0 Cookbook 错误一览表  (2007-6-14 14:58:28)

Developing in Trees   (2007-6-6 20:38:22)

Flash CS3 +As3 video  (2007-6-4 17:49:38)

Flash CS3 绘制复杂圆角矩形  (2007-6-4 17:48:32)

Flash CS3 +AS3键盘事件  (2007-6-4 17:47:4)

Leave a Comment

◎welcome to give out your point。

Misc

Linkage