Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 当一个SWF加载到另一个SWF时。主SWF能否读取加载的SWF以检索其内容并修改它们?_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 当一个SWF加载到另一个SWF时。主SWF能否读取加载的SWF以检索其内容并修改它们?

Actionscript 3 当一个SWF加载到另一个SWF时。主SWF能否读取加载的SWF以检索其内容并修改它们?,actionscript-3,flash,Actionscript 3,Flash,给出以下场景: 我在Illustrator或Flash中有一个很酷的图形 图形表示一个图形,内部有各种元素、形状、线条、渐变等 我把它导出到一个swf文件,如果我打开它,我可以看到我漂亮的图形 我有一个(纯)as3应用程序,它加载SWF 然后 我可以操纵加载的swf的内容吗。例如:移动其内容,更改其中的某些元素,复制它们。用变换矩阵之类的东西使它们变形 我至少可以在主应用程序中读取内容并复制它们(图形数据) 就我所研究的而言,我只能导入swf并将其作为一个整体显示对象使用,没有任何子对象

给出以下场景:

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

  • 我可以操纵加载的swf的内容吗。例如:移动其内容,更改其中的某些元素,复制它们。用变换矩阵之类的东西使它们变形
  • 我至少可以在主应用程序中读取内容并复制它们(图形数据)
就我所研究的而言,我只能导入swf并将其作为一个整体显示对象使用,没有任何子对象,并且我无法修改它


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

如果两者都是,您可以访问加载的swf的方法和属性


不,很遗憾,您无法检索或更改编译的图形元素的详细信息,您只能将它们用作显示对象,并通过它们的公共属性(缩放、旋转、变换等)对它们进行变换。 有一种编程方法,我通过在Flash IDE中将其设置为对象的“向导”来检索单路径坐标,并在一个框架内检索对象的位置,但正如您所想象的,它相当脏

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


另一个解决方案是使用更开放的格式,如SVG或FXG,但它可能会变得非常复杂…

SWF内容可以通过Flash Player 11.6和AIR 3.6中添加的新功能读取:

flash.display.graphics.readGraphicsData()

类似问题:


感谢您指出AVM兼容性在我的应用程序中不是问题,但知道这一点是件好事。关于loader的使用,我已经在用它来检索内容了。我的问题的关键是,我是否可以检索到我的主要导入对象信息。比如颜色,渐变,笔划,一些我可以在图形课上用到的东西。例如,如果我使用了一个内部为矩形的swf,笔划为2px,顶部为底部为线性渐变填充,我想修改它,并了解导入的swf对象的图形实例中使用的颜色和大小<代码>图形只是加载对象的另一个公共属性-您可以访问它。查看我的更新以了解如何在加载的SWF上绘制绿色圆圈。SVG正是我希望通过使用外部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();
}