我想将Flash电影嵌入Flex(Flex Builder 3),两者都使用Action Script 3,并在Flex中使用我的flash电影调用函数,反之亦然。
这可能吗?
答案 0 :(得分:2)
是的,这是可能的。如果您想将另一个swf嵌入到Flex应用程序中,您可以选择一些选项。
选项1 - 将swf(内联)嵌入SWFLoader组件中。此选项有一些安全缺陷,因为swf被加载到另一个应用程序域,因此您的Flex应用程序和嵌入内容之间的通信有时会很困难。你可以给这个组件一个id,听取完整的事件,然后与SWFLoader的content属性交谈,以获得对加载的swf的访问权限。类似的东西:
<mx:Script>
<![CDATA[
private function completeHandler(event : FlexEvent) : void
{
trace(mySwfLoader.content);
}
]]>
</mx:Script>
<mx:SWFLoader id="mySwfLoader" source="@Embed(source='YourSwf.swf') complete='completeHandler(event)" />
选项2 - 您可以使用元标记将swf作为类嵌入,然后在代码中创建该类的实例。这提供了很大的灵活性,但是你失去了能够以声明方式添加对象的好处。类似的东西:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="creationCompleteHandler(event)">
<mx:Script>
<![CDATA[
[Embed(source="mySourceSwf.swf")]
private var mySourceSwfClass : Class
private function creationCompleteHandler(event : FlexEvent) : void
{
var mySourceSwf = new mySourceSwfClass();
myCanvas.addChild(mySourceSwf);
trace(mySourceSwf);
}
]]>
</mx:Script>
<mx:Canvas id="myCanvas" />
</mx:Application>
选项3 - 根本没有swf。你想把任何你想要嵌入到fla中的UIMovieClip。然后,只要发布该fla,就可以创建.swc文件。然后,您可以在flex builder中链接到该swc文件。然后,这将自动将该MovieClip添加为您的项目中的可参考(这可能需要您进行更多调查)。基本上你可以做类似的事情:
<local:MyMovieClipInSwc id="myMovieClip" />
通过这种方式,您可以获得两个世界的好处,声明性标记以及同一应用程序域中的所有内容。关于这种方法,我要说的一件事就是Adobe在UIMovieClip类中表现出色,并且它的性能很糟糕。请注意,如果您开始在任何地方使用此应用程序可能会变得极其缓慢。