2010-06-06 3 views
5

मैं FlashDevelop के साथ मेरी पहली AS3 बना रहा हूं और मैं निर्माता निर्देश का अर्थ समझ में नहीं आता:"अगर (चरण) init();" एक्शनस्क्रिप्ट में मतलब है?

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 

    public class Main extends Sprite 
    { 

     public function Main():void 
     { 
      if (stage) init(); 
      else addEventListener(Event.ADDED_TO_STAGE, init); 
     } 

     private function init(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 
      // entry point 
     } 

    } 

} 

if (stage) init(); क्या मतलब है? Event.ADDED_TO_STAGE क्या है? init() में श्रोता को क्यों हटाएं?

+1

मुझे आश्चर्य है कि आप अभी तक जवाब नहीं देख रहे हैं, इसलिए जब आप प्रतीक्षा कर रहे हैं: यदि आप "Event.ADDED_TO_STAGE" खोजते हैं तो आपको कुछ दिलचस्प पढ़ने मिलते हैं, जो मुझे संदेह है कि आपके प्रश्न का उत्तर देगा। (मैं निश्चित रूप से नहीं जानता, मैं एक्शनस्क्रिप्ट में काम नहीं करता हूं, यही कारण है कि यह कोई जवाब नहीं है। लेकिन लिंक बहुत ही लक्ष्य पर दिखते हैं।) ऐसा लगता है कि समग्र प्रभाव यह सुनिश्चित करना है कि 'init 'केवल तब कहा जाता है जब आपका घटक "चरण" पर होता है: यदि आप पहले से ही हैं, तो आप इसे तुरंत कॉल करते हैं। यदि आप नहीं हैं, तो आप उस घटना के लिए श्रोता को हुक अप करते हैं जो आपको मंच पर रखे जाने पर आग लगती है (और फिर इसे कॉल करते समय हटा दें)। –

+0

केवल एक उत्तर लेकिन एक महान :) – user310291

उत्तर

9

मुख्य श्रेणी आमतौर पर एक दस्तावेज़ वर्ग -> कक्षा है जो पहले चरण में प्रदर्शित होती है (प्रदर्शन पेड़ की जड़)। इसका मतलब है कि कन्स्ट्रक्टर (मुख्य समारोह) में आपके पास पहले से ही मंच तक पहुंच है।

if(stage) init(); 

वास्तव में इसका मतलब है कि अगर चरण! = शून्य, प्रारंभिकरण चलाएं।

दस्तावेज़ कक्षा में शून्य के लिए परीक्षण क्यों करें?
यदि आपका एसएफएफ दूसरे एसएफएफ में लपेटा जाता है। आपके मुख्य समारोह में अभी तक मंच तक पहुंच नहीं होगी, क्योंकि डिस्प्ले पेड़ (मंच पर) पर केवल स्प्राइट्स (मूवी क्लिप इत्यादि) ही मंच तक पहुंच सकते हैं।
इस तरह:

var mc:MovieClip = new MovieClip();//mc.stage == null 
stage.addChild(mc);//mc.stage != null 

तो जब तक आप वास्तव में मंच की पहुंच है आप इंतजार कर रहे हैं ADDED_TO_STAGE, और फिर इसे init करने के लिए एक श्रोता जोड़कर। आप श्रोता को तुरंत हटा दें क्योंकि अब आपको इसकी आवश्यकता नहीं है।

यह दस्तावेज़ (मुख्य) वर्ग में एक आम स्थिति है, क्योंकि आपको अपना मेनू, परिचय, जो कुछ भी चरण में जोड़ने के लिए चरण की आवश्यकता है, इसलिए यह दिखाई दे रहा है।

+0

यह इंगित करने लायक हो सकता है कि यह अक्सर आवश्यक नहीं है। यदि प्रश्न में वर्ग को रूट-स्तरीय कुंजी ईवेंट श्रोता बनाने की ज़रूरत है, तो उसे एक मंच संदर्भ की आवश्यकता होगी। लेकिन अगर आपकी कक्षा को वास्तव में किसी भी चीज़ के लिए मंच संदर्भ की आवश्यकता नहीं है, तो इस तरह के कोड के लिए कोई विशेष कारण नहीं है (शायद आलसी प्रारंभिक प्रकार के रूप में)। – fenomas

+0

@ फेनोमास सच है, लेकिन मेरे अनुभव में मैंने कभी भी एक मुख्य वर्ग नहीं देखा है जिसे मंच के संदर्भ की आवश्यकता नहीं है। आपको हमेशा मंच पर कुछ जोड़ने की ज़रूरत है, क्योंकि कुछ दिखाने का कोई और तरीका नहीं है। – Antriel

+1

@ एंट्रियल: सामान्य रूप से एक वर्ग को अपने प्रदर्शन घटकों को स्वयं जोड़ना चाहिए, इसलिए इसे अन्य संदर्भों में पुन: उपयोग किया जा सकता है। यदि आप बच्चों को सीधे मंच जोड़ रहे हैं, तो आप एक वास्तविक वास्तविक चर का उपयोग कर रहे हैं। – fenomas