访问Loader内容的方法小结和为Loader添加侦听
访问用Loader加载进来的显示资源的时候,通常有3种办法,比如,myLoader是Loader类型的实例,要访问其加载的内容,可以这样:
1,myLoader.content;//直接访问实例的content
2,myLoader.getChildAt(0);//被加载的资源是myLoader的唯一孩子
3,e.target.content;//在侦听函数里面通过事件的目标对象访问
如果要为Loader添加侦听,必须通过Loader的实例变量contentLoaderInfo注册,contentLoaderInfo变量提供了对它装载资源的LoaderInfo对象的一个引用。而不能直接在Loader的实例上添加侦听!
以下代码简单展示了访问装载资源对象的方法和添加侦听的方法,有一个小疑惑啊,事件类型Event.COMPLETE和Event.INIT有什么区别,只知道前者是在加载结束之后触发,后者是在加载初始化后触发。牢记一点Event.COMPLETE永远发生的比Event.INIT晚 ,所以是不是在更多的情况下考虑使用Event.COMPLETE?
参考书对Event.INIT的解释如下
1,对位图而言,实例化发生于当外部文件已经完全装载的时候。在那个时期,被装载的像素数据自动地被放置在一个BitmapData对象中,然后它被关联于一个新的Bitmap对象,改Bitmap对象表示被装载的图像。(是不是对位图而言Event.INIT跟Event.COMPLETE是一样的?)
2,对于swf文件,实例化发生于当在帧1的所有资源和类(包括.swf的主类)已经被接收到的时候。在那个时期,ActionScript创建.swf主类的一个实例,并执行它的构造器。该主类实例表示被装载的.swf文件。
注意,千万不要在初始化完成之前(Event.INIT触发之前)或者加载完成之前(Event.COMPLETE触发之前)试图访问被加载的资源。此时会报错,如果用myLoader.content访问,content此时为空,如果用myLoader.getChildAt(0)访问则报错,错误为:RangeError:Error #2006
当被装载的资源对象添加到一个新的DisplayObjectContainer中,被装载的资源自动从它原来的父亲容器Loader对象中移除!
package{ import flash.display.*; import flash.events.Event; import flash.net.URLRequest; public class LoadJPG extends Sprite{ private var myLoader:Loader; public function LoadJPG(){ myLoader=new Loader(); myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeListener); myLoader.contentLoaderInfo.addEventListener(Event.INIT,initListener); myLoader.load(new URLRequest("fengjing.jpg")); }//end of constructor function LoadJPG private function completeListener(e:Event):void{ trace("This is from Event.COMPLETE listener"); trace(myLoader.content.width); trace(myLoader.getChildAt(0).height); trace(e.target.content.rotation); trace("添加到显示列表前 : ",myLoader.numChildren);//1 addChild(myLoader.content); trace("添加到显示列表后 : ",myLoader.numChildren);//0 }//end of function completeListener private function initListener(e:Event):void{ trace("This is from Event.INIT listener"); trace(myLoader.content.width); trace(myLoader.getChildAt(0).height); trace(e.target.content.rotation); }//end of function initListener }//end of class LoadJPG }//end of package
http://dailythink.blog.sohu.com/129101250.html said, thank you !