2012-06-02 11 views
5

क्या कोई भी एसवीजी फ़ाइल को फ्लाई पर एक्शनस्क्रिप्ट में आयात करने के लिए किसी भी पुस्तकालय या उपकरण के बारे में जानता है? मुझे फ्लैश में एक एसवीजी फ़ाइल आयात करने और इसे मूवीक्लिप में परिवर्तित करने या अधिमानतः एक फ्लैट 3 डी ऑब्जेक्ट में कनवर्ट करने में सक्षम होना चाहिए। यहां अंतिम लक्ष्य बढ़ी हुई वास्तविकता के साथ एक वेक्टर फ़ाइल को कार्यान्वित करना है।एक्शनस्क्रिप्ट 3 - आयात एसवीजी फ़ाइल

+1

यह एक शुद्ध एएस 3 प्रोजेक्ट या फ्लेक्स है यदि बाद में मुझे पता है कि आप यहां एक छवि नियंत्रण का उपयोग करके यह सुंदर कर सकते हैं जैसा कि यहां बताया गया है http://raghuonflex.wordpress.com/2009/06/10/loading-svg -content-in-flex-apps/आपको तीन ऑब्जेक्ट पर बहुत अधिक 2.5 डी रोटेशन गुण भी मिलते हैं http://www.flepstudio.org/forum/flash-cs4-tutorials/3550-rotationx-rotationy.html – shaunhusain

+0

@ shunhusain अभी यह एक actioncript 3 परियोजना है, लेकिन यदि आवश्यक हो तो मैं फ्लेक्स का उपयोग कर सकते हैं। मैं हालांकि फ्लेक्स के बारे में ज्यादा नहीं जानता। (मैं इस समय एक और आईडीई भी बर्दाश्त नहीं कर सकता।मेरे पास एडोब फ्लैश सीएस 6 है, इसलिए यदि इसका उपयोग करना संभव है, तो मैं फ्लेक्स के लिए कुछ ट्यूटोरियल देख सकता हूं।) – teynon

+0

मेरा मानना ​​है कि जब आप एक नई परियोजना बनाने के लिए जाते हैं तो आपके पास इसे एक फ्लेक्स प्रोजेक्ट बनाने का विकल्प होना चाहिए, जहां यह आपके लिए swcs शामिल होगा। मेरे पास फ्लेक्स में एसवीजी के साथ मिश्रित परिणाम हुए हैं, ऐसा लगता है कि एफएक्सजी बेहतर काम करता है क्योंकि यह सीधे फ्लैश में "प्राइमेटिव" ड्राइंग विधि में अनुवाद करता है। मुझे सीएस 6 नहीं मिल रहा है लेकिन यहां 5.5 प्रारूप समर्थित हैं http://helpx.adobe.com/flash/kb/supported-file-formats-flash-professional.html – shaunhusain

उत्तर

6

इसके लिए एक महान पुस्तकालय यहां डाउनलोड किया जा सकता है: http://code.google.com/p/as3svgrendererlib/ यह कार्यान्वित और विश्वसनीय है। ध्यान दें कि कोड को लागू करने के दो तरीके हैं।

 private function loadSVG(url:String):void { 
     ProcessExecutor.instance.initialize(stage); 
     ProcessExecutor.instance.percentFrameProcessingTime = 0.9; 

     loader = new URLLoader(); 
     loader.dataFormat = URLLoaderDataFormat.TEXT; 
     loader.addEventListener(Event.COMPLETE, svgLoaded, false, 0, true); 

     try { 
      loader.load(new URLRequest(url)); 
     } catch (error:Error) { 
      trace(error); 
     } 
    } 
    private function svgLoaded(e:Event):void { 
     var svgString:String = loader.data as String; 
     var svgDocument:SVGDocument = new SVGDocument(); 
     svgDocument.parse(svgString); 

     this.addChild(svgDocument); 
    } 

अन्य तरीके से भी कम है और जब आप केवल एक छोटा सा एसवीजी या बस कुछ ही लोड करने के लिए है जाने का रास्ता हो सकता है: मैं निम्नलिखित क्योंकि यह आपको अधिक नियंत्रण देता है पसंद करते हैं।

public function loadSVG(url:String) { 
     ProcessExecutor.instance.initialize(stage); 
     ProcessExecutor.instance.percentFrameProcessingTime = 0.9; 

     var svgDocument:SVGDocument = new SVGDocument(); 
     svgDocument.load(url); 
     addChild(svgDocument); 
    } 

दो महत्वपूर्ण सूचनाएं: 1. मैं चौड़ाई या SVGs की ऊंचाई और माता पिता के स्प्राइट एसवीजी लोड करने के बाद एक चौड़ाई और 0 की ऊंचाई था पर कब्जा करने में सक्षम हो ही नहीं सकता था। मैंने एएस 3 में लोड करने से पहले सभी एसवीजी को एक ही आकार बनाकर हल किया। उसके बाद मुझे पता था कि लोड किए गए एसवीजी का आकार बदलने के लिए मैंने स्केलएक्स और स्केलवाई का उपयोग किया था। 2. इस कोड का उपयोग करने से पहले चरण मौजूद होना चाहिए। निम्नलिखित कोड जोड़ना सुनिश्चित करेगा कि आप समस्याओं में भाग नहीं लेंगे: yourDisplayClass.addEventListener(Event.ADDED_TO_STAGE, loadYourSVGs);

अब आप इसे एक फ्लैट 3 डी ऑब्जेक्ट में कैसे परिवर्तित करते हैं, यह आपकी 3 डी लाइब्रेरी पर निर्भर करता है। मैंने Away3D के साथ काम किया है जहां आप अपने स्प्राइट 3 डी पर बिटमैपमटेरियल का उपयोग कर सकते हैं। Sprite3D कक्षा का उपयोग करने के लिए वस्तु होगी। मुझे आशा है कि आपकी 3 डी लाइब्रेरी मूवीक्लिप्स के उपयोग का समर्थन करे ताकि आप उन्हें अपने 3 डी ऑब्जेक्ट में जोड़ सकें। वरना आप फिल्म क्लिप से bitmapMaterial निकालने के लिए के रूप में मैं निम्न उदाहरण में किया है का उपयोग करना होगा:

public function movieClipToBitmapMaterial(mc:MovieClip):BitmapMaterial { 
     var bmData:BitmapData = new BitmapData(mc.width, mc.height, true, 0xFFFFFF); 
     bmData.draw(displayObject); 
     return new BitmapMaterial(bmData); 
    } 

ऊपर समारोह में आपका इनपुट movieclip जो पर आप अपने एसवीजी लोड किया जाएगा।

मुझे इस बारे में निश्चित नहीं है, लेकिन मुझे लगता है कि इस फ़ंक्शन का उपयोग करके आप गुणवत्ता को खोए बिना जितना चाहें उतना स्केल करने की क्षमता खो देंगे।

मुझे आशा है कि मेरा इनपुट कुछ मदद की थी! शुभकामनाएं

पीएस: एसडब्ल्यूसी को अपनी परियोजना से लिंक से जोड़ने और उपलब्ध उदाहरणों को देखने के लिए मत भूलना। कृपया अपने मूल प्रश्न पर शुनुसैन की उत्कृष्ट टिप्पणी के साथ-साथ ध्यान दें। आपको 3 डी लाइब्रेरी का उपयोग नहीं करना पड़ेगा।

+1

वह कोड.google यूआरएल अब मान्य नहीं है। https://github.com/AndyA/as3svgrendererlib काम करता है – Brad

-3

सलाम,

यह बहुत आसान है:

  1. खोलें "name.svg" illustartror में फ़ाइल।
  2. इसे "name.ai" के रूप में सहेजें
  3. इसे फ़्लैश में मंच में आयात करें, यह सब कुछ है।
+1

यह "वे उड़ते हैं"। दूसरे शब्दों में, कोड के माध्यम से - संपादक का उपयोग नहीं। – teynon

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