Flex 使用 Flash MovieClip的 几种方法
转自:http://blog.csdn.net/wangchibest/archive/2008/10/28/3164545.aspx
1> Flex 与 Flash 中的类对应关系 Flex 中的 UI元素 大都继承自 UIComponent类 Flash 中的架构 (Sprite类的继承关系) Flex 中无法直接使用Flash 中的MovieClip元件。只能通过工具 将Flash MovieClip 转成 UIMovieClip, UIMovieClip 继承自 MovieClip, MovieClip 类用于实现其使用方式与普通 Flex 组件一样的某个 Flash 组件的必要接口。因此,MovieClip 的子类可以用作 Flex 容器的子项或外观,它可以响应事件、定义视图状态和转换,还可以像所有 Flex 组件一样使用效果。 2> 进行转换所需要的工具。 (A)下载 Flex Component Kit 的地址。 https://www.adobe.com/cfusion/entitlement/index.cfm?e=flex%5Fskins 注册用户,登陆,选择最下面的 FLEX COMPONENT KIT FOR FLASH CS3 PROFESSIONAL 下载。 (B)要运行这个,你还需要Extension Manager, 下载地址: http://download.macromedia.com/pub/dw_exchange/extension_manager/win/em18_install.exe (想放个图片在这里,不会,呵呵~~) 3> 下面开始将几种使用Flash MovieClip 的方式 <1>直接用 Load swf的方式
UIComponent > FlexSprite> Sprite >DisplayObjectContainer>InteractiveObject >Displayobject
MovieClip > Sprite > DisplayObjectContainer > InteractiveObject >Displayobject<mx:Script>
<![CDATA[
private function playAnimation():void
{
var flashContent:MovieClip = loader.content as MovieClip;
flashContent.gotoAndPlay(1);
}
]]>
</mx:Script>
<mx:VBox backgroundColor="#FFFFFF">
<mx:SWFLoader id="loader" source="CarRace.swf"/>
</mx:VBox>
<mx:Button label="Play Movie" click="playAnimation()" />
<2> 将swf 文件 Embed 进 Flex的方式(这种做法时,要将Flash的贞率调至 24)
<mx:Script>
<![CDATA[
[Embed(source="CarRaceAsSymbol",symbol="mcCarRace")]
[Bindable]
private var flashSymbol:Class;
private function playAnimation():void
{
var flashContent:MovieClip =
loader.content as MovieClip;
flashContent.gotoAndPlay(1);
}
]]>
</mx:Script>
<mx:VBox backgroundColor="#FFFFFF">
<mx:SWFLoader id="loader" source="flashSymbol"/>
</mx:VBox>
<mx:Button label="Play Movie" click="playAnimation()"/>
1.在 Flash Library 中选中我们需要的MovieClip, 选中Menu中的 Commands,选中Convert Symbol to Flex Component. 察看这个MovieClip的linkage属性,你会发现 这个MovieClip父类已经从MovieClip 变成了UIMovieClip.
2.这时,在FlashLibrary 中,选中这个MovieClip,右键-〉选择Export SWC File.(也可以直接从File Menu中选择 Publish) 导出SWC.
(我觉得更合理的做法是,自定一个基类,让这个要导出的MovieClip去继承,这样做法的好处是可以使得 这个MovieClip具有了一些自定义的行为,比如事件,如下代码里的做法,Flex 可以监听到 Flash MovieClip 内部的事件)。
package flashcomps { import mx.flash.UIMovieClip; import flash.events.Event; import flash.events.TextEvent; [Event(name="start",type="flash.events.Event")] [Event(name="finish",type="flash.events.TextEvent")] public class CarRaceClass extends UIMovieClip { public function CarRaceClass() { super(); } public function go():void { gotoAndPlay(1); dispatchEvent(new Event("start")); } } }通过使这个 MovieClip 继承这个类,使得该类可以监听到Start 和 Finish的两个事件。
〈3〉Flex Project Menu-> Properties->Flex Build Path->Library Path 加入SWC存放的路径,(也可以直接将SWC 放到lib 文件夹里去,但这样不好,应该让引用的SWC在Flash的工作目录下,这样保证Flash 编译的时候,SWC也相应的编译)
这样:Flex 中可以 直接使用该组件了。比如:
<FlashComps:FlashCarRace id="race" x="100" y="100"/>