·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3.0中触发ADDED_TO_STAGE事件源代码示例

时间:2013-08-08 13:30CuPlayer.com
现有两个对象A和B,并且这两个对象都侦听了ADDED_TO_STAGE事件,如果在A对象的事件添加B对象到stage中,则B对象会触发两次ADDED_TO_STAGE,是什么原因导致的?有什么办法避免这个问题?

现有两个对象A和B,并且这两个对象都侦听了ADDED_TO_STAGE事件,如果在A对象的事件添加B对象到stage中,则B对象会触发两次ADDED_TO_STAGE,是什么原因导致的?有什么办法避免这个问题?

这是因为:事件处在目标阶段的时候添加子对象,子对象的侦听器被触发两次
解决办法就是在子对象的ADDED_TO_STAGE事件中先清除该事件,然后在REMOVED_FROM_STAGE事件里再次侦听。
A类:

  1. public class A extends Sprite { 
  2. public function A() { 
  3. addEventListener(Event.ADDED_TO_STAGE, eventHandler); 
  4. private function eventHandler(evt:Event):void { 
  5. removeEventListener(evt.type, eventHandler); 
  6. if (evt.type == Event.ADDED_TO_STAGE) { 
  7. trace("A"); 
  8. addChild(new B());//酷播cuplayer.com提示:添加B作为子对象 
  9. addEventListener(Event.REMOVED_FROM_STAGE, eventHandler); 
  10. }else { 
  11. addEventListener(Event.ADDED_TO_STAGE, eventHandler); 

B类:

  1. public class B extends Sprite { 
  2. public function B() { 
  3. addEventListener(Event.ADDED_TO_STAGE, eventHandler); 
  4. private function eventHandler(evt:Event):void { 
  5. removeEventListener(evt.type, eventHandler); 
  6. if (evt.type == Event.ADDED_TO_STAGE) { 
  7. trace("B");//www.cuplayer.com提示:只触发一次 
  8. addEventListener(Event.REMOVED_FROM_STAGE, eventHandler); 
  9. }else { 
  10. addEventListener(Event.ADDED_TO_STAGE, eventHandler); 

 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器