从另一个SWF文件访问一个文件中的MovieClip

时间:2009-05-15 08:56:51

标签: flash actionscript-3

我是Flash和AS的新手。      我必须在as2中使用2个swf文件,在as3中使用另一个,我在as3 swf中加载了swf文件(as2),它的工作但我需要从(swf(as2))访问所有的movieclip并更改属性(如样式) )动态地。我怎么能这样做。

这里是我的代码::

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, handleComplete);
addChild(loader);
loader.load(new URLRequest("games.swf"));
loader.x = 50;
loader.y = 125;

function handleComplete(event:Event):void{


    trace("swf loaded");
}

上面的代码工作正常,并且还加载了swf文件。如何从swf as2文件访问单个movieclip ..我也知道影片剪辑的所有名称(ID)。

帮助我克服这个问题......提前致谢..

1 个答案:

答案 0 :(得分:2)

我建议使用Event.INIT而不是Event.COMPLETE。在加载完成 后,INIT获取触发器,加载的swf中的所有类/实例都已初始化并可以使用。

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.INIT, handleInit);
addChild(loader);

function handleInit(e:Event):void{
var as2Movie:AVM1Movie = e.target.content as AVM1Movie;
}

您可以通过Loader类的content属性访问已加载的内容。 不是因为你将as2电影加载到as3电影中,所以有一些限制:

“AVM1Movie是一个表示AVM1影片剪辑的简单类,它使用ActionScript 1.0或2.0。(AVM1是用于运行ActionScript 1.0和2.0的ActionScript虚拟机.AVM2是用于运行ActionScript 3.0的ActionScript虚拟机。)当Loader对象加载Flash Player 8或更早版本的SWF文件时,会创建AVM1Movie对象.AVM1Movie对象可以使用从DisplayObject类继承的方法和属性(例如x,y,width等)但是,AVM1Movie对象和AVM2对象之间不允许互操作性(如调用方法或使用参数)。

AVM2 SWF文件加载的AVM1 SWF文件有几个限制:

加载的AVM1Movie对象作为AVM1 SWF文件的psuedo-root对象以及由其加载的所有AVM1 SWF文件(就像ActionScript 1.0 lockroot属性设置为true一样)。 AVM1影片始终是任何子代中任何ActionScript 1.0或2.0代码执行的首选。除非在加载的AVM1 SWF文件中设置了lockroot属性,否则加载的子项的_root属性始终是此AVM1 SWF文件。 AVM1内容无法将文件加载到级别。例如,它无法通过调用loadMovieNum(“url”,levelNum)来加载文件。 AVM2 SWF文件加载的AVM1 SWF文件无法将另一个SWF文件加载到此文件中。也就是说,它无法在自身上加载另一个SWF文件。但是,此SWF文件加载的子Sprite对象,MovieClip对象或其他AVM1 SWF文件可以加载到此文件中。“来自as3 docs。

有关详细信息,请参阅AMV1Movie Reference

如果你想从as3调用as2电影,你需要使用本地连接在2个swfs之间建立通信。

Grant Skinner为这种情况编写了一个名为SWF Bridge的方便的东西(简单as2到as3通信)。值得一试。

古德勒克!