【问题标题】:When a SWF is loaded into another. Can the main SWF read the loaded one to retrieve its contents and modify them?当一个 SWF 被加载到另一个时。主 SWF 可以读取加载的 SWF 以检索其内容并修改它们吗?
【发布时间】:2009-11-29 16:40:30
【问题描述】:

给出这个场景:

  • 我在 Illustrator 或 Flash 中有一个很酷的图形。
  • 图形代表一个图形,内部包含各种元素、形状、线条、渐变等。
  • 我将它导出为一个 swf 文件,如果我打开它,我可以看到我漂亮的图形。
  • 我有一个(纯)as3 应用程序,它加载 swfs。

那么……

  • 我可以操作加载的 swf 的内容吗?例如:移动它的内容,改变里面的一些元素,复制它们。用变换矩阵之类的东西来变形它们?
  • 我至少可以读取内容并将它们(图形数据)复制到主应用程序中吗?

据我研究,只能导入swf,作为一个整体的显示对象使用,没有子,也不能修改。

我想以某种方式使用外部 swf 的图形信息来允许主应用程序对其进行变形或使用它来制作图形的新版本。

【问题讨论】:

    标签: actionscript-3 flash


    【解决方案1】:

    不,遗憾的是您无法详细检索或更改已编译的 Graphics 元素,您只能将它们用作 DisplayObject 并通过它们的公共属性(缩放、旋转、变换等)对其进行变换。 有一种方法可以通过将单个路径坐标设置为 Flash IDE 中对象的“指南”并在 onEnterFrame 中检索对象的位置来以编程方式检索单个路径坐标,但正如您可以想象的那样,它非常脏。

    您可以通过将剪辑设置为加载的 SWF 中的类(在 Flash IDE 中:library>symbol>properties>export for AS)或使用 BitmapData 从主影片中随意绘制它们来复制剪辑。

    另一种解决方案是使用更开放的格式,例如 SVG 或 FXG,但它会变得相当复杂......

    【讨论】:

    • SVG 正是我想通过使用外部 swfs 来避免的,但恐怕没有其他方法(至少现在是这样)。谢谢你的回答。
    【解决方案2】:

    如果两者都是AVM2 movies,您可以访问已加载的 SWF 方法和属性。

    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
    private function onLoadComplete(e:Event):void
    {
      var content:Object = LoaderInfo(e.target).content;
      //assuming there is a public someMethod() defined in 
      //the document class of the loaded SWF, you can call it as:
      content.someMethod();
      //you can access any property you wish
      content.someObject.graphics.beginFill(0x00ff00);
      content.someObject.graphics.drawCircle(10, 10, 10);
      content.someObject.graphics.endFill();
    }
    

    【讨论】:

    • 感谢您指出 AVM 兼容性,这在我的应用程序中不是问题,但知道这是件好事。好吧,关于加载器的使用,我已经在使用它来检索内容了。我的问题的关键是我是否可以将导入的对象信息检索到我的主目录中。诸如颜色、渐变、笔触之类的东西,我可以在图形类中使用。例如,如果我加载一个内部有一个矩形的 swf,描边为 2px,线性渐变填充顶部底部,我想修改它并知道在导入的 swf 对象的图形实例中使用了哪些颜色和大小
    • 是的,你可以。 graphics 只是加载对象的另一个公共属性——你可以访问它。检查我的更新,看看如何在加载的 SWF 上绘制一个绿色圆圈。
    【解决方案3】:

    Flash Player 11.6 和 AIR 3.6 新增功能可读取 SWF 内容:

    flash.display.Grapics.readGraphicsData()

    http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html#readGraphicsData%28%29

    类似的问题:

    How to read data from shape/graphics object

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多