Event.INIT Event.COMPLETE 区别

   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  
 

例如,在加载影片或动画的第一帧时将调度 Event.INIT。然后,影片将可供访问并可添加到显示列表中。不过,下载完整的影片可能需要花更长的时间。只有在加载了完整的影片之后才会调度 Event.COMPLETE。

init 事件始终在 complete 事件之前。

访问用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对象中移除!

 

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