2013-07-06 7 views
5

पर अधिक बार निष्पादित किया है, मैं वास्तव में curios हूं क्यों यह हो रहा है। मैंने दो वस्तुओं का निर्माण किया। एक दूसरे का बच्चा है। मैंने ईवेंट श्रोता ADDED_TO_STAGE दोनों के साथ पंजीकृत किया। क्लासबी में जोड़ा गया तरीका दो बार निष्पादित किया जाता है।इवेंट ADDED_TO_STAGE ने 3 बार

यह क्यों हो रहा है और मैं इस व्यवहार को कैसे रोक सकता हूं?

जवाब के लिए thanx

public class ClassA extends Sprite 
{ 
     public function ClassA() 
     { 
      this.addEventListener(Event.ADDED_TO_STAGE, onAdded); 
     } 

     private function onAdded(e:Event):void 
     { 
      trace("ON ADDED 1"); 
      var classB : ClassB = new ClassB(); 
      addChild(classB); 
     } 
} 

public class ClassB extends Sprite 
{ 
     public function ClassB() 
     { 
      this.addEventListener(Event.ADDED_TO_STAGE, onAdded); 
     } 

     private function onAdded(e:Event):void 
     { 
      trace("ON ADDED 2"); 
     } 
} 

उत्पादन: जोड़ा गया 1 पर जोड़ा 2 पर जोड़ा 2 पर

उत्तर

9

here से:

Event.ADDED_TO_STAGE 
Event.ADDED 

हैं: इसी तरह के दो घटनाओं रहे हैं उनके बीच अंतर:

जोड़ा

जब सुन DisplayObject एक और DisplayObject में जोड़ा जाता है भेजा जाता है (कोई फर्क नहीं पड़ता अगर यह एक स्टेज वस्तु है या नहीं)। यदि प्रदर्शन डिस्प्ले ऑब्जेक्ट में कोई अन्य डिस्प्ले ऑब्जेक्ट जोड़ा जाता है तो यह भी प्रेषित हो जाता है। जब सुन DisplayObject चरण के लिए या किसी अन्य DisplayObject जो चरण में जोड़ा जाता है में जोड़ा जाता है

ADDED_TO_STAGE

भेजा जाता है।


आपके मामले में यह दो बार डिस्पैच:

1) ClassB ClassA कि पहले से ही स्टेज को जोड़ा गया जोड़ा गया है।

2) कक्षाबी चरण में जोड़ा गया है।

यह थोड़े निम्न स्तर API है। आप माता-पिता के मामले में कस्टम तर्क प्रदान कर सकते हैं या नहीं। मूल रूप से लोगों को आप जानते हैं कि, आप वास्तव में इस सुनने की जरूरत नहीं है और आप कॉल कर सकते हैं:

this.removeEventListener(Event.ADDED_TO_STAGE, onAdded); 

दो बार onAdded बुला रोकने के लिए।

कि को रोकने के लिए एक और तरीका है classB जोड़ रहा है, जबकि ClassA निर्माण:

private classB:ClassB = new ClassB(); 
public function ClassA() 
{ 
    addChild(classB); 
    this.addEventListener(Event.ADDED_TO_STAGE, onAdded); 
} 
+0

मुझे कुछ नया :) शिक्षण के लिए धन्यवाद – Riddlah

0

यह क्योंकि घटना बुदबुदाती की है।

आप घटना श्रोता एक बार onAddedToStage कहा जाता है, तो अंदर पहले बयान को हटाने की जानी चाहिए:

private function onAdded(e:Event):void 

होना चाहिए

removeEventListener(Event.ADDED_TO_STAGE, onAdded); 
संबंधित मुद्दे