Flex加载swf的几种方法

Flex加载swf的几种方法

Flex中通常会使用一些动画,这些需要借助flash的时间轴才可以创建。前面讲过两种方式:
1. 由Flash编译,由Flex写AS,通过库中元件的链接类调用。查看
2. 由Flash导出SWC,由Flex导入SWC。查看
这篇文章讲述使用外部swf的方式。

加载方式有很多,这里介绍两种,一种Embed,一种是Loader。

1 Embed
1.1 Image
使用Image类,将Embed swf作为Image的source,可在mxml中创建。
1.2 MovieClip
可以直接作为MovieClip使用,在AS中创建方便,需要UIComponent容器。
2 Loader
可以动态加载,显示加载进度,降低首次载入文件量大小。
2.1 Loader
需要UIComponent容器
2.2 SWFLoader
可以直接使用addElement,是flex对Loader的一个封装。

下面是具体实现,通过四种方式加载外部fishmomo.swf。
具体实现代码如下

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
			   creationComplete="init()" xmlns:local="*"
			   >
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import mx.controls.Image;
			import mx.controls.SWFLoader;
			import mx.core.MovieClipAsset;
			import mx.core.UIComponent;
			private var swfLoader:SWFLoader = new SWFLoader();
			private var loader:Loader = new Loader();
			[Embed(source="assets/fishmomo.swf")]
			[Bindable]
			public var FFish:Class;
 
			public function init():void{
				/**
				 * 使用loader动态加载
				 * 可以降低初次加载的文件量,可以显示加载进度
				 * SWFLoader是对Loader的封装,可直接使用addElement 
				 */ 
				//SWFLoader
				swfLoader.addEventListener(Event.COMPLETE,swfLoadComplete);
				swfLoader.load("assets/fishmomo.swf");
 
				//Loader
				loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadComplete);
				loader.load(new URLRequest("assets/fishmomo.swf"));
 
				/**
				 * 下面使用Embed
				 * 使用Embed的方式,swf中不能有形变动画
				 * 具体原因未知
				 */ 
				//使用Image,可以使用mxml<image source="{FFish}" />
				var image:Image = new Image();
				image.source = FFish;
				addElement(image);
 
				//使用MovieClip
				var movieClip:MovieClip = new FFish() as MovieClip;
				var ui:UIComponent = new UIComponent();
				ui.addChild(movieClip);
				ui.x = 200;
				addElement(ui);
			}
 
			private function swfLoadComplete(e:Event):void{
				addElement(swfLoader);
				swfLoader.x = 200;
			}
 
			private function loadComplete(e:Event):void{
				var ui:UIComponent = new UIComponent();
				ui.addChild(loader);
				addElement(ui);
				ui.x = 100;
			}
		]]>
	</fx:Script>
</s:Application>


没有更多推荐了,返回首页