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

 

std::shared_ptr<FiniteStateMachine> WidgetScheduleNodeImpl::MakeFiniteStateMachine() { auto builder = FiniteStateMachine::Builder::New(GetDescription(), S_WIDGET_INIT); if (builder == nullptr) { return nullptr; } builder->MakeTransition(S_WIDGET_INIT, E_START_WIDGET, S_WIDGET_WAITING, [this](FiniteStateMachine &machine, uint32_t event) { OnStartSchedule(machine, event); }); builder->MakeTransition(S_WIDGET_WAITING, E_START_AUTH, S_WIDGET_AUTH_RUNNING, [this](FiniteStateMachine &machine, uint32_t event) { OnStartAuth(machine, event); }); builder->MakeTransition(S_WIDGET_WAITING, E_CANCEL_AUTH, S_WIDGET_AUTH_FINISHED, [this](FiniteStateMachine &machine, uint32_t event) { OnStopSchedule(machine, event); }); builder->MakeTransition(S_WIDGET_WAITING, E_NAVI_PIN_AUTH, S_WIDGET_AUTH_FINISHED, [this](FiniteStateMachine &machine, uint32_t event) { OnNaviPinAuth(machine, event); }); builder->MakeTransition(S_WIDGET_AUTH_RUNNING, E_COMPLETE_AUTH, S_WIDGET_AUTH_FINISHED, [this](FiniteStateMachine &machine, uint32_t event) { OnSuccessAuth(machine, event); }); builder->MakeTransition(S_WIDGET_AUTH_RUNNING, E_CANCEL_AUTH, S_WIDGET_AUTH_FINISHED, [this](FiniteStateMachine &machine, uint32_t event) { OnStopSchedule(machine, event); }); builder->MakeTransition(S_WIDGET_AUTH_RUNNING, E_NAVI_PIN_AUTH, S_WIDGET_AUTH_FINISHED, [this](FiniteStateMachine &machine, uint32_t event) { OnNaviPinAuth(machine, event); }); builder->MakeTransition(S_WIDGET_AUTH_RUNNING, E_START_AUTH, S_WIDGET_AUTH_RUNNING, [this](FiniteStateMachine &machine, uint32_t event) { OnStartAuth(machine, event); }); builder->MakeTransition(S_WIDGET_AUTH_RUNNING, E_UPDATE_AUTH, S_WIDGET_AUTH_RUNNING, [this](FiniteStateMachine &machine, uint32_t event) { OnStopAuthList(machine, event); }); return builder->Build(); }代码解析
07-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值