2012-05-25 31 views
6

मैंने फ्लैश प्रोफेशनल में एक मोटा गेम इंजन ढांचा बनाना शुरू कर दिया है और मैं उत्सुक हूं कि मैं फ्लैश लाइब्रेरी में ऑब्जेक्ट कैसे बना सकता हूं कि मैं मंच पर खींचने और एएस 3 से सुलभ संपत्तियों को असाइन करने में सक्षम हूं।फ्लैश स्टेज इंस्टेंस को फ्लैश प्रोफेशनल में एएस 3 स्क्रिप्ट पास करने के लिए अद्वितीय गुण कैसे दे सकते हैं?

उदाहरण: कमरे में एक प्रकाश पर मुड़ता है
मैं, एक स्विच ऑब्जेक्ट (उदा एक प्रकाश स्विच) बनाने के लिए इतना है कि जब यह साथ खिलाड़ी interactes, यह कुछ कोड में विशिष्ट चलाता है चाहता हूँ जैसे।

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

flash component parameters

मैं फ़्लैश UIComponent वर्ग का विस्तार के बारे में थोड़ा पढ़ा है (ऊपर पैरामीटर नियंत्रण मैं तलाश कर रहा हूँ के प्रकार का एक उदाहरण है), लेकिन मुझे लगता है कि यह सही नहीं है दृष्टिकोण क्योंकि मैं जो चाहता हूं उसके लिए यह अधिक है। मैं चाहता हूं कि लाइब्रेरी स्टेज इंस्टेंस से एएस 3 में कुछ बुनियादी पैरामीटर पास करें। मैं इंस्टेंस नाम के माध्यम से डेटा पास नहीं करना चाहता क्योंकि अगर मैं अधिक जटिल बातचीत करना चाहता हूं तो यह बहुत गन्दा लगता है।

धन्यवाद!

+1

[इस] (http://www.adobe.com/devnet/flash/learning_guide/components/part03.html) क्या आप देख रहे हैं है? –

+0

हाँ! मैं इस तरह कुछ ढूंढ रहा हूँ। दुर्भाग्यवश यह आलेख वास्तव में यह नहीं बताता कि घटक AS3 के साथ कैसे काम कर सकता है। उदा।, मैं एएस 3 से उन पैरामीटरों का उपयोग कैसे करूं, किस प्रकार की कक्षा का उपयोग किया जाना चाहिए? आदि लेख कहता है कि यह संभव है, लेकिन वास्तव में विवरण पर कोई प्रकाश नहीं डाला है। UIComponent को विस्तारित करने के बारे में एक ट्यूटोरियल का एक लिंक है, लेकिन मुझे केवल अपने मूल गैर-यूआई संबंधित घटकों को बनाने में दिलचस्पी है। – justinl

+0

फ्लैश आईडीई से संपादन करने से गेम गन्दा हो जाएगा, आप एएस 3 फाइल में इंस्टेंस क्यों नहीं बनाते और गतिशील कमरे के लिए JSON का उपयोग नहीं करते हैं। आप स्तर संपादकों को भी बना सकते हैं लेकिन फ्लैश आइडिया के साथ संपादन स्तर आपको जिस तरह से गिरना चाहिए। – ymutlu

उत्तर

0

मुझे लगता है कि लोग क्या कहने की कोशिश कर रहे हैं यह है कि आप पूरी चीज डेटा संचालित कर सकते हैं, और इसलिए आप अपने अंतिम गेम के साथ डेटा के साथ आईडीई को जोड़ सकते हैं।

लेकिन इस पर विचार करें ... यह वही हो सकता है जो आप चाहते हैं।

यदि आप हैं, उदाहरण के लिए, एक BaseSwitch कक्षा:

public Class BaseSwitch extends MovieClip { 
    private var _lightName:String; 
    private var _light:Light; 
    public function get lightName():String { 
     return lightName; 
    } 
    pubic function set lightName(value:String):void { 
     if (value != _lightName) { 
     _lightnName = value; 
     //Note I don't advocate having children reach into their parents like this, 
     //but you sound like you don't want the parent involved in the process, so 
     //this is one way you could do it. 
     if (parent.hasOwnProperty(lightName) && parent[lightName] is Light) { 
      _light = parent[lightName]; 
     } else { 
      trace('Could not find light', _lightName); 
     } 

     } 
    } 
    //other code to listen for gestures and operate the light 
} 

अब, आप एक स्विच, एक विशिष्ट प्रकाश नाम से संचालित एक पुस्तकालय उदाहरण बना सकते हैं और BaseSwitch करने के लिए अपने आधार वर्ग स्थापित करने के लिए चाहते हैं। जब आप डायलॉग क्लास सेट करते हैं तो डायलॉग बंद करते हैं, तो आप देखेंगे कि यह आपको एक संवाद देता है कि कक्षा कक्षा में कक्षा नहीं मिल सका और एक उत्पन्न होगा। आप इसे कक्षा के साथ प्रतिस्थापित करने जा रहे हैं जो lightName सेट करता है। रूट लाइब्रेरी में एक नया AS3 क्लास बनाएं जो आपके लाइब्रेरी इंस्टेंस के समान नाम से है। यह कुछ इस तरह दिखना चाहिए:

public class SpecificSwitch { 
    public function SpecificSwitch() { 
     super(); 
     lightName = 'theSwitch'; 
    } 
} 

अन्य संभावित विकल्पों माता पिता क्लास मैच प्रकाश के उदाहरण के नाम के आधार के साथ स्विच के उदाहरण ऊपर वाले शामिल है, इसलिए यदि यह एक light1 और एक light1Switch पाता है, यह या तो एक संदर्भ देता है स्विच के लिए प्रकाश में या यह बस अपने स्वयं के आयोजन सुनने प्रणाली में एक मैपिंग सेट करता है।

0

मैं एक "स्विच" मूवी क्लिप बनाउंगा और इसे "लाइट" मूवी क्लिप के साथ actioncrip पर निर्यात करूंगा। मुख्य श्रेणी .as फ़ाइल में मैं उन्हें addChild (क्लिप) का उपयोग करके मंच में इन्सेट करता हूं और फिर "प्रकाश" को नियंत्रित करने के लिए "स्विच" मूवी क्लिप में एक क्लिक श्रोता जोड़ता हूं।

0

यह आसानी से किया जा सकता है।

घटक मेरी राय में गलत दृष्टिकोण है।

सबसे पहले आप अपनी लाइब्रेरी आइटम को एक्शनस्क्रिप्ट लिंक/लेबल सेट करना चाहते हैं। लाइब्रेरी पैनल में । - "yourMC" पर राइट क्लिक करें >> "गुण" पर क्लिक करें। - गुण संवाद में "एक्शन स्क्रिप्ट के लिए निर्यात करें" - फिर अपनी कक्षा का नाम दें जैसे "yourMC_Class"

अब एमसी आपके कोड में संदर्भित होने के लिए तैयार है।

अगला आप गतिशील रूप से लाइब्रेरी से मंच पर अपनी "एमएमसी" जोड़ना चाहते हैं। जो इस तरह किया जा सकता है।

// पहले संदर्भ पुस्तकालय मद

var yourMC_ref:yourMC_Class = new yourMC_Class(); 

// फिर वर

var your_MC_OBJ = yourMC_ref; 

में गतिशील एम सी आइटम लोड // फिर अपने एमसी मंच जोड़ें।

this.addChild(your_MC_OBJ); 
your_MC_OBJ.x = 200; 
your_MC_OBJ.y = 100; 

संक्षेप में, मैं मंच पर लाइब्रेरी आइटम कैसे जोड़ता हूं।

स्पष्ट रूप से मूल कार्य/कोड है।

एक परियोजना में मैं एक बाहरी कक्षा में सभी कोड है, जो मामले में आप सिर्फ वार्स स्थापित करेगा के रूप में सार्वजनिक वार्स

public var yourMC_ref:yourMC_Class = new yourMC_Class(); 
public var your_MC_OBJ = yourMC_ref; 

और पिछले 3 एक सार्वजनिक समारोह

public function ADD_First_MC() 
{ 
     this.addChild(your_MC_OBJ); 
     your_MC_OBJ.x = 200; 
     your_MC_OBJ.y = 100; 
} 
में कोड की लाइनों के लिए होता है

अब 'your_MC_OBJ' का उपयोग अधिक जटिल तरीकों से किया जा सकता है।

उदाहरण के लिए। लाइट स्विच बनाने के लिए कार्यक्षमता तक पहुंचने की आवश्यकता के आधार पर कई विकल्प हैं। उदाहरण के लिए। एक अलग एमसी लाइब्रेरी आइटम को "your_MC_OBJ" एमसी के भीतर विशिष्ट फ्रेम चलाएं।

हालांकि अगर यह मैं था तो मैं addChild removeChild का उपयोग करके प्रकाश को चालू या बंद करने के लिए बस माउस फ़ंक्शन का उपयोग करता। उदाहरण के लिए।

public var LightON = 0; 
public var yourMC_ref:yourMC_Class = new yourMC_Class(); 
public var your_MC_OBJ = yourMC_ref; 

तो एक सार्वजनिक समारोह है कि घटनाओं

public function LightON_OFF() 
    { 
     if(LightON == 1) 
      { 
       this.addChild(your_MC_OBJ); 
       your_MC_OBJ.x = 200; 
       your_MC_OBJ.y = 100; 
      } 
     if(LightON == 0) 
      { 
       this.removeChild(your_MC_OBJ); 
      } 
    } 

आशा इस मदद करता है/बंद संभालती पैदा करते हैं।

0

तो, आप जो चाहते हैं उसके लिए, जबकि यह आपके इच्छित काम करने का सबसे अच्छा तरीका नहीं हो सकता है, मैं समझता हूं कि यह आपका अनुभव है जिसे आप बना रहे हैं।

घटकों का उपयोग करें, हाँ ...निम्नलिखित तरीके से (सबसे सरल एक):

  • एक मूवी क्लिप
  • पर "घटक परिभाषाएं" पुस्तकालय में यह राइट-क्लिक करें
  • क्लिक करें
  • एक संपत्ति जोड़े बनाएं, जिसका नाम निर्धारित करते हैं, एक चर नाम (वर परीक्षण, इस बात के लिए) और एक डिफ़ॉल्ट मान
  • ठीक क्लिक करें

  • खोलें अपनी फिल्म क्लिप

  • 0,123,
  • पहले फ्रेम के लिए ओपन कोड और प्रारंभिक मान के बिना वैरिएबल घोषित करें (var test: स्ट्रिंग;)
  • इसका मूल्य ट्रेस करें (ट्रेस (टेस्ट);)

  • वापस मंच जड़ तक

  • खींचें जाओ और मंच
  • टेस्ट यह (सीएमडी/Ctrl + Enter) (हो सकता है यह शून्य प्रिंट होगा पुस्तकालय से आइटम को छोड़ना, पता नहीं क्यों, यह ध्यान नहीं देता डिफ़ॉल्ट मान कभी कभी)

  • मंच पर अपने घटक का चयन करें

  • ओपन गुण पैनल (विंडोज> गुण)
  • जाएं इस पैनल पर घटक पैरामीटर और संपत्ति मूल्य बदल

  • आप चाहिए सांत्वना

पर पता लगाया मूल्य देख और, मुझे लगता है, इस तरह आप आप क्या चाहते हैं के लिए घटकों से गुणों का उपयोग कर सकते हैं, का उपयोग कर की तरह एक स्ट्रिंग और इसके नाम से नियंत्रित एमसी प्राप्त करना।

गुड लक