7

有谁知道任何用于将 SVG 文件动态导入到 actionscript 的库或工具?我需要能够将 SVG 文件导入 Flash 并将其转换为影片剪辑或最好是平面 3d 对象。这里的最终目标是实现一个带有增强现实的矢量文件。

4

2 回答 2

8

可以在这里下载一个很棒的库: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 或仅加载几个时,这可能是一种可行的方法。

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 上使用位图材质。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 库。

于 2012-08-13T08:52:34.497 回答
-4

萨拉姆,

这很容易:

  1. 在 illustrator 中打开“name.svg”文件。
  2. 将其另存为“name.ai”
  3. 将其导入flash中的舞台,仅此而已。
于 2013-07-03T13:52:18.070 回答