その場でSVGファイルをアクションスクリプトにインポートするためのライブラリやツールを知っている人はいますか? SVG ファイルをフラッシュにインポートし、それをムービークリップまたはできればフラット 3D オブジェクトに変換できる必要があります。ここでの最終目標は、拡張現実を使用してベクター ファイルを実装することです。
2 に答える
このための優れたライブラリは、次の場所からダウンロードできます。http ://code.google.com/p/as3svgrendererlib/ 実装が簡単で、信頼性があります。コードを実装する方法は2つあることに注意してください。私はそれがあなたにより多くのコントロールを与えるので以下を好みます:
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);
}
もう1つの方法は短く、小さなSVGまたは少数の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);
}
2つの重要な注意事項:1。SVGの幅または高さをキャプチャできなかったようで、SVGを読み込んだ後の親スプライトの幅と高さは0でした。AS3にロードする前に、すべてのSVGを同じサイズにすることで、これを解決しました。その後、ScaleXとscaleYを使用してロードされたSVGのサイズを変更した寸法がわかりました。2.このコードを使用するには、ステージが存在している必要があります。次のコードを追加すると、問題が発生しないようになります。yourDisplayClass.addEventListener(Event.ADDED_TO_STAGE, loadYourSVGs);
これをフラットな3Dオブジェクトに変換する方法は、3Dライブラリによって異なります。Sprite3Dでbitmapmaterialを使用できるAway3Dを使用しました。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);
}
上記の関数への入力は、SVGをロードしたムービークリップになります。
よくわかりませんが、この機能を使えば、品質を落とさずに好きなだけスケーリングできるようになると思います。
私の意見がお役に立てば幸いです。幸運を
PS:プロジェクトへのリンクからSWCを追加し、提供されている例を確認することを忘れないでください。元の質問に対するshaunhusainの優れたコメントにも注意してください。3Dライブラリを使用する必要がない場合があります。