2012-06-02 23 views
5

Qualcuno sa di librerie o strumenti per importare un file SVG in actionscript al volo? Devo essere in grado di importare un file SVG in flash e convertirlo in un Movie Clip o preferibilmente in un oggetto 3d piatto. L'obiettivo finale qui è quello di implementare un file vettoriale con realtà aumentata.Actionscript 3 - Importazione file SVG

+1

è un puro progetto as3 o flex se quest'ultimo so che puoi farlo semplicemente usando un controllo immagine come spiegato qui http://raghuonflex.wordpress.com/2009/06/10/loading-svg -content-in-flex-apps/ottieni anche le tre proprietà di rotazione 2.5D su praticamente tutti gli oggetti http://www.flepstudio.org/forum/flash-cs4-tutorials/3550-rotationx-rotationy.html – shaunhusain

+0

@ shaunhusain In questo momento è un progetto di actionscript 3, ma posso usare flex se necessario. Però non so molto di flex. (Non posso nemmeno permettermi un altro IDE al momento.Ho Adobe Flash CS6, quindi se è possibile utilizzarlo, potrei esaminare alcuni tutorial per il flex.) – teynon

+0

Credo che quando si va a creare un nuovo progetto si abbia la possibilità di renderlo un progetto flessibile, dove includerà gli swcs per te. Ho avuto risultati misti con svg in Flex, sembra che fxg funzioni meglio dal momento che si traduce direttamente nel metodo di disegno "primativo" in flash. Non riesco a trovare CS6 ma ecco i formati 5.5 supportati http://helpx.adobe.com/flash/kb/supported-file-formats-flash-professional.html – shaunhusain

risposta

6

Una grande libreria per questo può essere scaricata qui: http://code.google.com/p/as3svgrendererlib/ È facile da implementare e affidabile. Si noti che ci sono due modi per implementare il codice. Io preferisco la seguente perché ti dà più controllo:

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

L'altro modo è più breve e potrebbe essere la strada da percorrere quando si hanno solo caricare una piccola SVG o solo alcuni.

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

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

Due note importanti: 1. Io non poteva sembrano essere in grado di catturare la larghezza o l'altezza dei SVG e il genitore Sprite aveva una larghezza e un'altezza di 0 dopo il caricamento del SVG. Ho risolto questo problema rendendo tutti gli SVG della stessa dimensione prima di caricarli in AS3. Successivamente ho capito le dimensioni con cui ho usato ScaleX e scaleY per ridimensionare gli SVG caricati. 2. Lo stage deve esistere prima di poter usare questo codice. aggiungendo il seguente codice si assicurerà che non si verifichino problemi: yourDisplayClass.addEventListener(Event.ADDED_TO_STAGE, loadYourSVGs);

Ora come si converte questo in un oggetto 3D piatto dipende dalla libreria 3D. Ho lavorato con Away3D dove puoi usare bitmapmaterial su Sprite3D. La classe Sprite3D sarebbe l'oggetto da usare. Spero che la tua libreria 3D supporti l'uso di MovieClip in modo da poterli aggiungere al tuo oggetto 3D. Altrimenti si dovrà usare per estrarre il bitmapMaterial dal clip filmato come ho fatto nel seguente esempio:

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

Il vostro contributo nella funzione di cui sopra sarà il movieclip su wich aver caricato la tua SVG.

Non sono sicuro di questo, ma penso che utilizzando questa funzione perderai la possibilità di ridimensionare quanto vuoi senza perdere qualità.

Spero che il mio contributo sia stato di aiuto! Buona fortuna

PS: non dimenticare di aggiungere l'SWC dal link al progetto e di controllare gli esempi forniti. Nota bene anche l'eccellente commento di shaunhusain sulla tua domanda originale. Potrebbe non essere necessario utilizzare la Libreria 3D.

+1

Tale URL del codice.google non è più valido. https://github.com/AndyA/as3svgrendererlib funziona – Brad

-3

Salam,

E 'molto facile:

  1. Aprire il file "nome_immagine.svg" in illustartror.
  2. Salvalo come "name.ai"
  3. Importalo sul palco in flash, questo è tutto.
+1

Questo è "on they fly". In altre parole, via codice - non usando l'editor. – teynon

Problemi correlati