AS3

2012-08-27 14 views
5

में एक बार में सभी ईवेंट श्रोताओं को कैसे हटाएं I as3 में एक छोटा सा गेम बना रहा हूं।AS3

इस गेम में 10 स्तर हैं।

जब मैं 1 स्तर दर्ज करता हूं तो सब कुछ ठीक है। लेकिन जब मैं दूसरे स्तर (फ्रेम) में प्रवेश करता हूं तो पहले फ्रेम से ईवेंट श्रोताओं अभी भी काम कर रहे हैं और एक चेतावनी प्राप्त करते हैं कि 'शून्य objct संदर्भ की वस्तु का उपयोग नहीं कर सकता'। ऐसा इसलिए है क्योंकि मैं पहले स्तर के प्रत्येक ऑब्जेक्ट को हटाता हूं और वें चरण 2 से ऑब्जेक्ट्स जोड़ता हूं।

मैंने removeEventListeners का उपयोग करने का प्रयास किया है, लेकिन यह काम नहीं करता है, क्योंकि ENTER_FRAME श्रोताओं ने ईवेंट को निकालने के बाद एक और बार काम किया है श्रोताओं।

मैंने विभिन्न स्तरों के लिए अलग-अलग फ्रेम का उपयोग करने की कोशिश की है, बिट यह काम नहीं करता है। इसके अलावा मैंने सभी 10 फ्रेमों के लिए 1 frmae का उपयोग करने का प्रयास किया, लेकिन मुझे बहुत सी चेतावनी मिलती है और फ्लैश लोडर अधिभारित होता है।

मैं स्तर (पीछे और आगे) के माध्यम से कैसे स्विच कर सकता हूं? अग्रिम में धन्यवाद।

addEventListener(Event.ENTER_FRAME, subtracting2); 
    arrListeners.pop(); // poping it out of the array because it will be deleted after the count reaches 0 
    function subtracting2 (e:Event):void 
    { 
     count--; 
     var FAcoef:Number = count/30; // 
     FadeAway.alpha = FAcoef; //     Some effect like FadeAway 
     setChildIndex(FadeAway, numChildren - 1); // 
     if(count == 0) 
     { 
      setChildIndex(FadeAway, 0); 
      removeEventListener(Event.ENTER_FRAME, subtracting2); 
     } 
    } 
+0

आप नहीं कर सकते। यदि आप ईवेंट (** एसिंक्रोनस **) से परेशान नहीं करना चाहते हैं, तो [AS3 सिग्नल] (https://github.com/robertpenner/as3- सिग्नल) (** सिंक्रोनस **) आज़माएं। – Florent

+4

हो सकता है कि आपको ईवेंट श्रोताओं को एंटरफ्रेम लूप में नहीं जोड़ना चाहिए ... – Kodiak

+0

मुझे यह सुनिश्चित करने के लिए ENTER_FRAME जोड़ना होगा कि स्तर पारित किया गया है और यह सुनिश्चित करने के लिए कि गेम कानून कोई टूटा नहीं है। यह मेरा विचार नहीं होना चाहिए कि सही क्या है (EventListeners को हटाएं)। जब तक यह ठीक काम करता है, मैं किसी भी विचार को स्वीकार करूंगा – Stefan4024

उत्तर

9

सभी श्रोताओं को हटाने का कोई अंतर्निहित तरीका नहीं है।

ऑब्जेक्ट कचरा इकट्ठा होने पर श्रोताओं को हटाए जाने के लिए आप कमजोर संदर्भों का उपयोग कर सकते हैं।

object.addEventListener (......, ......., झूठी, 0, सच);
http://blog.reyco1.com/method-of-removing-all-event-listeners/

(आयन टिप्पणी पर एक नज़र डालें) लेकिन .. आप ऊपर के किसी भी आवश्यकता नहीं होनी चाहिए अगर आप को ध्यान रखना:

या आप removeAllListeners कार्यक्षमता अपने आप को जोड़ सकता है, यहाँ कुछ जानकारी है हर घटना श्रोता को तुरंत हटा दें जब इसकी आवश्यकता नहीं है।

यदि आपके पास एक या अधिक घटना श्रोताओं के साथ एक वर्ग है जो उदाहरण के जीवन के अंत तक आवश्यक है, तो आपको एक विनाश() फ़ंक्शन बनाना चाहिए। उस नष्ट() फ़ंक्शन में आप सभी ईवेंट श्रोताओं को हटा देंगे।

आपके मामले में, आप दूसरे स्तर (फ्रेम) पर जाने से पहले नष्ट() को कॉल कर सकते हैं।

+0

पास करने के लिए कुछ निश्चित अंक प्राप्त करने की आवश्यकता है यदि मैं कमजोर संदर्भ और कचरा एकत्रित करने का प्रयास करता हूं, तो मैं मंच से जुड़े ईवेंट श्रोताओं को कैसे हटा सकता हूं? और यदि मैं ऑब्जेक्ट को हटा देता हूं, तो क्या मुझे इसे ईवेंट श्रोता को फिर से शुरू करने के लिए फिर से कॉल करना चाहिए? – Stefan4024

+0

"ऑब्जेक्ट को हटाने" से आपका क्या मतलब है? इसे हटाकर या मंच से हटा रहा है? –

+0

मैं नष्ट() का उपयोग कैसे कर सकता हूं? जितना मुझे पता है कि नष्ट करना एएस 3 – Stefan4024