Actionscript 3 - 导入SVG文件

时间:2012-06-02 23:13:31

标签: actionscript-3 svg augmented-reality

有没有人知道任何用于动态导入SVG文件的库或工具?我需要能够将SVG文件导入到flash中并将其转换为movieclip或最好是平面3d对象。这里的最终目标是实现具有增强现实的矢量文件。

2 个答案:

答案 0 :(得分: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或者只需加载一些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.我似乎无法捕获SVG的宽度或高度,并且在加载SVG后,父Sprite的宽度和高度为0。我通过在将所有SVG加载到AS3之前使其大小相同来解决这个问题。之后,我知道尺寸我使用ScaleX和scaleY来调整加载的SVG的大小。 2.在使用此代码之前,舞台必须存在。添加以下代码将确保您不会遇到问题:yourDisplayClass.addEventListener(Event.ADDED_TO_STAGE, loadYourSVGs);

现在,如何将其转换为平面3D对象取决于您的3D库。我使用过Away3D,你可以在你的Sprite3D上使用bitmapmaterial。 Sprite3D类将是要使用的对象。我希望您的3D库支持使用MovieClip,以便您可以将它们添加到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库。

答案 1 :(得分:-3)

萨拉姆,

这很容易:

  1. 在illustartror中打开“name.svg”文件。
  2. 将其另存为“name.ai”
  3. 将它导入flash中的舞台,就是这样。