2012-06-02 26 views
5

¿Alguien sabe de alguna biblioteca o herramienta para importar un archivo SVG en actionscript sobre la marcha? Necesito poder importar un archivo SVG en flash y convertirlo a un clip de película o preferiblemente un objeto plano 3D. El objetivo final aquí es implementar un archivo vectorial con realidad aumentada.Actionscript 3 - Importar archivo SVG

+1

es un proyecto as3 puro o flexible, si este último sé que puedes hacer esto simplemente usando un control de imagen como se explica aquí http://raghuonflex.wordpress.com/2009/06/10/loading-svg -content-in-flex-apps/también obtienes las tres propiedades de rotación 2.5D en casi todos los objetos http://www.flepstudio.org/forum/flash-cs4-tutorials/3550-rotationx-rotationy.html – shaunhusain

+0

@ shaunhusain Ahora mismo es un proyecto actionscript 3, pero puedo usar flex si es necesario. No sé mucho sobre flex sin embargo. (Tampoco puedo pagar otro IDE en este momento).Tengo Adobe Flash CS6, así que si es posible usarlo, podría consultar algunos tutoriales para flex.) – teynon

+0

Creo que cuando vaya a crear un nuevo proyecto, debe tener la opción de convertirlo en un proyecto flexible, donde incluirá los swcs por ti. He tenido resultados mixtos con svg en Flex, parece que fxg funciona mejor ya que se traduce directamente en el método de dibujo "primative" en flash. Parece que no puedo encontrar CS6, pero aquí están los 5.5 formatos compatibles http://helpx.adobe.com/flash/kb/supported-file-formats-flash-professional.html – shaunhusain

Respuesta

6

Se puede descargar una gran biblioteca para esto aquí: http://code.google.com/p/as3svgrendererlib/ Es fácil de implementar y confiable. Tenga en cuenta que hay dos formas de implementar el código. Yo prefiero la siguiente, ya que le da más control:

 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); 
    } 

La otra forma es más corto y podría ser el camino a seguir cuando sólo tiene que cargar un pequeño SVG o sólo algunos.

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

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

Dos notas importantes: 1. no podía parecen ser capaces de capturar la anchura o la altura de los IVS y el padre Sprite tenía una anchura y una altura de 0 después de cargar el SVG. Lo resolví haciendo todos los SVG del mismo tamaño antes de cargarlos en AS3. Después de eso, conocí las dimensiones en las que utilicé ScaleX y scaleY para cambiar el tamaño de los SVG cargados. 2. El escenario debe existir antes de poder usar este código. al agregar el siguiente código, se asegurará de que no tenga problemas: yourDisplayClass.addEventListener(Event.ADDED_TO_STAGE, loadYourSVGs);

Ahora, cómo convierte esto en un objeto 3D plano depende de su Biblioteca 3D. He trabajado con Away3D donde puedes usar material de mapa de bits en tu Sprite3D. La clase Sprite3D sería el objeto a usar. Espero que su Biblioteca 3D admita el uso de MovieClips para que pueda agregarlos a su Objeto 3D. De lo contrario se tiene que usar para extraer el bitmapMaterial de la imagen en movimiento como lo he hecho en el siguiente ejemplo:

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

Su entrada en la función anterior será el clip de película en wich que haya cargado el SVG.

No estoy seguro de esto, pero creo que al usar esta función perderá la capacidad de escalar tanto como quiera sin perder calidad.

¡Espero que mi contribución haya sido útil! Buena suerte

PD: no se olvide de agregar el SWC desde el enlace a su proyecto y verifique los ejemplos proporcionados. Tenga en cuenta también el excelente comentario de shaunhusain en su pregunta original. Es posible que no tenga que usar la Biblioteca 3D.

+1

Esa URL de code.google ya no es válida. https://github.com/AndyA/as3svgrendererlib funciona – Brad

-3

Salam,

Es muy fácil:

  1. Abrir el archivo "name.svg" en illustartror.
  2. Guárdelo como "name.ai"
  3. Importación en el escenario en flash, eso es todo.
+1

Esto es "en que vuelan". En otras palabras, a través del código - no usando el editor. – teynon

Cuestiones relacionadas