Event.INIT Event.COMPLETE 区别

 

访问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 !

 

你可能感兴趣的:(.net,Blog,Flash,actionscript)