7

その場でSVGファイルをアクションスクリプトにインポートするためのライブラリやツールを知っている人はいますか? SVG ファイルをフラッシュにインポートし、それをムービークリップまたはできればフラット 3D オブジェクトに変換できる必要があります。ここでの最終目標は、拡張現実を使用してベクター ファイルを実装することです。

4

2 に答える 2

8

このための優れたライブラリは、次の場所からダウンロードできます。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ライブラリを使用する必要がない場合があります。

于 2012-08-13T08:52:34.497 に答える