2012-06-02 2 views
5

Кто-нибудь знает какие-либо библиотеки или инструменты для импорта SVG-файла в ActionScript на лету? Мне нужно иметь возможность импортировать SVG-файл во флэш и преобразовать его в мувиклип или предпочтительно в плоский трехмерный объект. Конечной целью здесь является реализация векторного файла с дополненной реальностью.Actionscript 3 - Импортировать файл SVG

+1

это чистый проект as3 или flex, если последнее, что я знаю, вы можете сделать это довольно просто с помощью управления изображением, как описано здесь http://raghuonflex.wordpress.com/2009/06/10/loading-svg -content-in-flex-apps/вы также получаете три свойства вращения 2.5D на почти каждом объекте http://www.flepstudio.org/forum/flash-cs4-tutorials/3550-rotationx-rotationy.html – shaunhusain

+0

@ shaunhusain Прямо сейчас это проект ActionScript 3, но при необходимости я могу использовать flex. Хотя я не знаю много о гибке. (Я также не могу позволить себе еще одну IDE на данный момент.У меня есть Adobe Flash CS6, поэтому, если это возможно, я мог бы изучить некоторые учебные пособия для flex.) – teynon

+0

Я верю, что когда вы идете создать новый проект, у вас должна быть возможность сделать его гибким проектом, где он будет включать swcs для вас. У меня были смешанные результаты с svg в Flex, кажется, что fxg работает лучше, поскольку он напрямую переводится в «примитивный» метод рисования во flash. Я не могу найти CS6, но вот поддерживаемые форматы: 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); 
    } 

Другой путь короче и может быть путь, когда вы только загрузить небольшой SVG или только некоторые.

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 и родительский Sprite имел ширину и высоту 0 после загрузки SVG. Я решил это, сделав все SVG одинаковым размером, прежде чем загружать их в AS3. После этого я знал размеры, которые я использовал ScaleX и scaleY для изменения размера загруженных SVG. 2. Эта сцена должна существовать, прежде чем вы сможете использовать этот код. добавив следующий код, убедитесь, что вы не столкнетесь с проблемами: yourDisplayClass.addEventListener(Event.ADDED_TO_STAGE, loadYourSVGs);

Теперь, как вы преобразовываете это в плоский трехмерный объект, зависит от вашей 3D-библиотеки. Я работал с Away3D, где вы можете использовать bitmapmaterial на вашем Sprite3D. Класс Sprite3D будет объектом использования. Я надеюсь, что ваша 3D-библиотека поддерживает использование MovieClips, чтобы вы могли добавить их в свой 3D-объект. Иначе вам придется использовать для извлечения 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); 
    } 

Ваш вклад в вышеприведенной функции будет мувиклип на Wich вы загрузили ваш SVG.

Я не уверен в этом, но думаю, что с помощью этой функции вы потеряете способность масштабировать столько, сколько хотите, не теряя качества.

Надеюсь, что мой вход был полезен! Удача

PS: не забудьте добавить SWC из ссылки на ваш проект и посмотреть приведенные примеры. Пожалуйста, обратите внимание на отличный комментарий shaunhusain по вашему первоначальному вопросу. Возможно, вам не придется использовать 3D-библиотеку.

+1

Этот код code.google больше не действителен. https://github.com/AndyA/as3svgrendererlib works – Brad

-3

Салам,

Это очень легко:

  1. Открыть файл "name.svg" в illustartror.
  2. Сохраните его как "name.ai"
  3. Импортируйте его на сцену во flash, вот и все.
+1

Это «на лету». Другими словами, через код - не используя редактор. – teynon

Смежные вопросы