2007年6月22日 @ 11:57
aas3 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方法载入的文件移除掉 |
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。
