2010-02-05 16 views
7

फ्लैश आईडीई से एक्शनस्क्रिप्ट में निर्यात की गई सभी ऑब्जेक्ट्स की सूची के माध्यम से पहुंचने या पुन: प्रयास करने का कोई तरीका है? मैं अपने चुने हुए एमसी के माध्यम से बस फिर से शुरू करके और अपने नाम जानने के बिना, उन्हें एक निश्चित तरीके से संसाधित करके कुछ परेशानी बचाने के लिए देख रहा हूं।फ्लैश AS3 - लाइब्रेरी ऑब्जेक्ट्स की एक सूची प्राप्त करना?

धन्यवाद।

उत्तर

0

मुझे एक ही समस्या थी और यदि कोई बेहतर है तो समाधान में दिलचस्पी होगी। मैं क्या कर रहा था, हालांकि, प्रत्येक तत्व के कन्स्ट्रक्टर को दस्तावेज़ वर्ग मिल रहा था (इस पोल को कॉल करके जब तक कि वह सही वर्ग का नहीं पाया गया) और फिर उस दस्तावेज़ वर्ग के फ़ंक्शन को कॉल कर रहा हो।

मैं उन स्थानों के बारे में गेम जानकारी देने की कोशिश कर रहा था जिन्हें मैंने आईडीई के माध्यम से रखा था।

public function Location(){ 
    var d:DisplayObject = parent; 
    while(!(d is Game)){ 
     d = d.parent 
    } 

    d.addLocation(this); 
} 

फिर खेल कक्षा में मैं उन्हें एक सरणी के लिए जोड़ सकते हैं और उन के माध्यम से पुनरावृति करने में सक्षम था:

तो मैं स्थान इस तरह एक निर्माता दे दी है। मैं सकारात्मक हूं यह ऐसा करने का सबसे अच्छा तरीका नहीं हो सकता है, लेकिन यह काम किया।

+0

आप स्थान और सामान के लिए है कि के माध्यम से एक कंटेनर के लिए हर एमसी जोड़ने और फिर पुनरावृति कर सकते हैं। उस मध्य चरण से बचने की उम्मीद कर रहा था। – Scott

0

असल में, नहीं ... जब आप लाइब्रेरी में एक्शनस्क्रिप्ट में निर्यात करते हैं, तो यह एक वर्ग बन जाता है। अन्य वर्गों के समान - मूवीक्लिप, लोडर ... आदि। ये सभी संकलित समय गुण हैं। असल में, रन-टाइम के दौरान इन कक्षाओं को खोजने का कोई तरीका नहीं है।

लेकिन, आपने एमसी के माध्यम से पुनरावृत्ति का उल्लेख किया और उन्हें कुछ करने का उल्लेख किया। आप अपने वर्ग के आधार पर मंच पर पहले से ही MCs के साथ कुछ करने के लिए की जरूरत है, आप इस निम्नलिखित का उपयोग कर सकते हैं:

for (var i=0; i<this.numChildren; i++){ 
    trace("Movie Name: "+this.getChildAt(i).name); 
    trace("Movie Class: "+getQualifiedClassName(this.getChildAt(i))); 
} 

ऊपर पाश और getQualifiedClassName का उपयोग करते हुए एक वैकल्पिक समाधान हो सकता है।

1

रन-टाइम पर नहीं, नहीं। आप आईडीई में जेएसएफएल के साथ पुस्तकालय वस्तुओं का उपयोग कर सकते हैं हालांकि: http://livedocs.adobe.com/flash/9.0/main/flash_cs3_extending.pdf। निश्चित नहीं है कि अगर यह बिल्कुल मदद करता है लेकिन शायद आप पुस्तकालय का विश्लेषण करके अपने आवेदन में उपयोग के लिए कोड उत्पन्न कर सकते हैं।

var lib = fl.getDocumentDOM().library; 
for (var i = 0; i < lib.items.length; i++) 
{ 
    var item = lib[0]; 
    fl.trace(item.name + " " + item.getItemType()); 
} 

शायद पुस्तकालय वस्तुओं 'getItemProperty() या getItemType() के आधार पर कुछ कोड उत्पन्न करते हैं।

इसके अलावा, मुझे लगता है कि आपकी सबसे अच्छी शर्त यह है कि दूसरों ने कहा। एक डमी मूवीक्लिप बनाएं जिसमें इसके अंदर प्रत्येक तत्व है और इसे चरण से छुपाएं। उस पर "चरण में जोड़ा गया" के लिए श्रोता जोड़ें और अपने बच्चों के माध्यम से लूप करें और "प्रतिबिंब" getQualifiedClassName का उपयोग कक्षा के आधार पर क्रियाएं करने के लिए करें या बस एक इंस्टेंस नाम और स्विच स्टेटमेंट का उपयोग करें।

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

1

यह प्रश्न कुछ हद तक this one के समान हैं।

var doc = fl.getDocumentDOM(); 
var libItems = doc.library.items; 
var libItemsNum = libItems.length; 
var classesString = 'var '+doc.name.substr(0,doc.name.length-4)+'Classes = ['; 
var classesNum = 0; 
var classes = []; 

fl.outputPanel.clear(); 
for(var i = 0 ; i < libItemsNum; i++){ 
if(libItems[i].linkageExportForAS){ 
    classes[classesNum] = libItems[i].linkageClassName; 
    classesNum++; 
} 
} 
for(i = 0; i < classesNum; i++){ 
if(i < classesNum-1) classesString += '"'+classes[i]+'",'; 
else  classesString += '"'+classes[i]+'"];'; 
} 
fl.clipCopyString(classesString); 
fl.trace(classesString); 

यह तार की एक सरणी के रूप में अपने निर्यात वर्गों के नाम बाहर निशान ताकि आप उस में उपयोग कर सकते हैं के साथ:

यह JSFL है आप केवल MovieClips कि actionscript को निर्यात किया जाता सूचीबद्ध करने की आवश्यकता एप्लिकेशनडोमेन की getDefinitionByName() या flash.utils.getDefinition()। इसके अलावा, यह ट्रेस किए गए संदेश को क्लिपबोर्ड पर कॉपी करता है। यदि आप JS12L को कमांड फ़ोल्डर में सहेजते हैं, तो आप थोड़ी गति के लिए कीबोर्ड शॉर्टकट सेट कर सकते हैं।

HTH, जॉर्ज

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