2010-11-05 12 views
8

मेरे पास फ्लैग में ग्राफिक्स संपत्तियों का एक गुच्छा है, मूवीक्लिप्स कुछ कक्षाओं से जुड़े हुए हैं। मैं fla को एक swc के रूप में निर्यात करता हूं, जिसे मैं अपनी लाइब्रेरी में "कोड में विलय" विकल्प के साथ जोड़ता हूं।एसडब्ल्यूसी के साथ काम करना - getDefinitionByName समस्या

सभी काम करता है, मैं अपने मूवीक्लिप्स के उदाहरण बना सकता हूं, बस अपनी कक्षाओं को इस तरह बुलाकर।

 //example 1 
    var newMc:BaseClass = new GraphicAsset(); 

अब अगर मैं निम्नलिखित करना चाहता हूं, तो फ़्लैश एक त्रुटि फेंकता है, ग्राफिक्सएसेट क्लास शून्य है!

//example 2 
    var GraphicsAssetClass:Class = getDefinitionByName("GraphicAsset") as Class; 

एक ही रास्ता मैं काम करने के लिए ऊपर लाइन प्राप्त कर सकते हैं इस

//example 3 
    var newMc:GraphicAsset; 
    var GraphicsAssetClass:Class = getDefinitionByName("GraphicAsset") as Class; 

    //then I'm able to do this 
    var newMc:BaseClass = new GraphicsAssetClass(); 

आप एक समाधान जहां मैं बस मैं की तरह getDefinitionByName() फोन करके वर्ग मिल सकता है के बारे में सोच सकते हैं करने के लिए है उदाहरण 3 पर उदाहरण के लिए, उदाहरण 3 समाधान का सहारा लेना।

+0

'GraphicAsset' के लिए पूरी तरह से योग्य क्लास नाम क्या है? क्या यह सिर्फ 'ग्राफिकएसेट' है या क्या कोई पैकेज भी है? –

+0

नहीं, मैं एक पैकेज का उपयोग नहीं कर रहा हूं। ध्यान दें कि उदाहरण 1 और 3 ठीक काम करते हैं, उदाहरण के अलावा 3 अव्यवहारिक – PatrickS

उत्तर

10

समस्या यह है कि संकलक किसी भी वर्ग को बाहर कर देगा जो सीधे आपके संदर्भ में संदर्भित नहीं है। यह एक अनुकूलन है कि संकलक डिज़ाइन द्वारा लागू होता है।

इसके आसपास सामान्य तरीका ठीक है जैसा आपने अपने "उदाहरण 3" में दिखाया है। लेकिन यह ध्यान रखना महत्वपूर्ण है कि दोनों लाइनों को एक ही स्थान पर एक साथ नहीं होना चाहिए। जब तक

var newMc:GraphicAsset; 

आपकी SWF कि निष्पादन के मुख्य पथ से संदर्भित किया जा रहा है में कहीं है, तो GraphicAsset के लिए वर्ग परिभाषा अंतिम swf में शामिल किया जाएगा। फिर आप कॉल कर सकते हैं ...

var GraphicsAssetClass:Class = getDefinitionByName("GraphicAsset") as Class; 

कहीं और से पूरी तरह से, और यह आपकी अपेक्षा के अनुसार काम करेगा।

सीपेट एसडब्ल्यूएफ में दो लाइनों को खोजने के लिए यह भी संभव है (और काफी आम)। इस मामले में, एक एसएफएफ रनटाइम पर अन्य एसएफएफ लोड करेगा। आमतौर पर, लोडर swf getDefinitionByName("SomeClass) का उपयोग कर एक हो सकता है, और लोड swf एक है कि class SomeClass परिभाषित करता है, और var a:SomeClass; का उपयोग करता है, यह सुनिश्चित करें कि वर्ग swf में बनाया जाता होगा।

इस कारण से, आपको अक्सर "लाइब्रेरी एसएफएफ" में परिभाषित "MyLibraryManifest" नामक एक कक्षा मिलती है, और उसके बाद उस एसएफएफ की मुख्य फिल्म क्लिप से संदर्भित किया जाता है। "प्रकट" वर्ग तो बस इस प्रकार दिखाई देगा:

class MyLibraryManifest { 

    private var a:GraphicAsset; 
    private var b:SomeClass; 
    private var c:SomeOtherClass; 

    //... and so on... 

} 

[संपादित करें] आप mxmlc संकलक को -includes या -include-libraries विकल्पों का उपयोग कर सकते हैं एक या अधिक अलग अलग वर्गों को शामिल करने के लिए मजबूर करने के संयोजक (या एक संपूर्ण एससीसी), ऊपर वर्णित "छंटनी अनुकूलन" लागू किए बिना।

see adobe's site mxmlc कमांड लाइन विकल्पों के स्पष्टीकरण के लिए।

विकल्प भी specified in a config file हो सकते हैं, जिससे आप यह नियंत्रित कर सकते हैं कि फ्लैश आईडीई दृश्यों के पीछे कंपाइलर को कैसे बुलाएगा।

शुभकामनाएं!

+0

हां, यह इस समय मैं कम या कम कर रहा हूं। मेरे पास एक कक्षा है जो चर की सूची है। जब भी मैं एक नई संपत्ति जोड़ता हूं, तो मैं सूची में एक नया चर जोड़ता हूं। मैं उम्मीद कर रहा था कि मैं उस कदम से बच सकता हूं। आपके उत्तर के लिए धन्यवाद! – PatrickS

+0

@ पैट्रिकस - बस एक संपादन जोड़ा गया है जो mxmlc कंपाइलर को कमांड लाइन विकल्पों का उपयोग करके एक विकल्प प्रस्तुत करता है (मुझे इसे हर बार देखना होगा)। ;) – Lee

+0

दिलचस्प !!! :) अच्छा, एक नज़र होगा! धन्यवाद! – PatrickS

1

FlashDevelop का उपयोग करना यह ठीक करने के लिए बहुत आसान है।

प्रोजेक्ट सूची से अपने शामिल एससीसी पर राइट क्लिक करें। विकल्प चुनें "पुस्तकालय (पूर्ण पुस्तकालय) शामिल करें"।

.. अब आप अपने swc फ़ाइल से एक अनिर्धारित कक्षा प्राप्त करने के लिए getDefinitionByName का उपयोग कर सकते हैं।

+0

क्या यह अभी भी काम करता है? जब मैं ऐसा करने की कोशिश करता हूं तब भी मुझे एक ही समस्या मिलती है। क्या मुझे एसडब्ल्यूसी या किसी भी चीज में संकलन विकल्प सेट करने की ज़रूरत है? –

संबंधित मुद्दे