当SWF加载到另一个SWF时。主SWF可以读取加载的SWF以检索其内容并进行修改吗?

时间:2009-11-29 16:40:31

标签: actionscript-3 flash

提供此方案:

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

则...

  • 我可以操纵加载的swf的内容。例如:移动其内容,更改内部的一些元素,复制它们。用变换矩阵和类似的东西变形它们?
  • 我是否至少可以阅读内容并在主应用程序中复制它们(图形数据)。

就我一直在研究的情况而言,我只能导入swf并将其用作整个显示对象,没有任何孩子,我无法修改它。

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

3 个答案:

答案 0 :(得分:1)

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

您可以通过将剪辑设置为加载的SWF中的类(在Flash IDE中:库>符号>属性>导出AS)或使用BitmapData从主影片中随意绘制剪辑来复制剪辑。

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

答案 1 :(得分:0)

如果两者都是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();
}

答案 2 :(得分:0)

可以通过添加到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