`
wangcheng
  • 浏览: 1466750 次
  • 性别: Icon_minigender_1
  • 来自: 青岛人在北京
社区版块
存档分类
最新评论

Flex中加载Flash CS3制作的swf文件

阅读更多

Flex加载Flash CS3制作的swf文件, 看Demo

 

package myflex {
	
	import flash.display.DisplayObject;
	import flash.display.Loader;
	import flash.display.MovieClip;
	import flash.events.*;
	import flash.net.URLRequest;
	
	import mx.core.UIComponent;
	
	/**
	 * http://livedocs.adobe.com/flex/3/html/help.html?content=Working_with_MovieClips_7.html
	 * 
	 * dispatch Event.COMPLETE when swf load complete.
	 * dispatch HTTPStatusEvent.HTTP_STATUS when network is error.
	 * dispatch IOErrorEvent.IO_ERROR when load swf error.
	 */
	public class ExternalSwfLoader extends UIComponent {
		
		private var loader : Loader;
		
		private var visibleAfterLoaded : Boolean;
		
		private var progressHandle : Function;
		
		private var loadSwfComplete : Boolean = false;;
		
		public function ExternalSwfLoader(progressHandle:Function = null, visibleAfterLoaded:Boolean = true) {
			super();
			init(progressHandle, visibleAfterLoaded);
		}
		
		protected function init(progressHandle:Function = null, visibleAfterLoaded:Boolean = true) : void {
			this.visibleAfterLoaded = visibleAfterLoaded;
			this.progressHandle = progressHandle;
			unLoad();
		}
		
		public function get content() : DisplayObject {
			if (loadSwfComplete) {
				return loader.content;
			}
			return null;
		} 
		
		public function get movieClip() : MovieClip {
			if (this.content) {
				return this.content as MovieClip;
			}
			return null;
		}
		
		public function loadSwf(externalSwfUrl:String, progressHandle:Function = null, visibleAfterLoaded:Boolean = true) : void {
			init(progressHandle, visibleAfterLoaded);
			
			//"http://www.[yourdomain].com/externalSwf.swf"
			var request:URLRequest = new URLRequest(externalSwfUrl);
			loader = new Loader();
			addListeners(loader.contentLoaderInfo);
			loader.load(request);
			
			if (visibleAfterLoaded) {
				addChild(loader);
			}
		}
		
		private function addListeners(dispatcher:IEventDispatcher) :void {
            dispatcher.addEventListener(Event.COMPLETE, completeHandler);
            dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
            dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
            if (progressHandle != null) {
				dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandle);
            }
		}

		/**
		 *	load external swf successful.
		 */
		private function completeHandler(event:Event) : void {
			this.loadSwfComplete = true;
			this.width = loader.content.width;
			this.height = loader.content.height;
			dispatchEvent(new Event(Event.COMPLETE));
		}
		
		private function httpStatusHandler(event:Event) : void {
			dispatchEvent(new Event(HTTPStatusEvent.HTTP_STATUS));
		}
		
		private function ioErrorHandler(event:Event) : void {
			dispatchEvent(new Event(IOErrorEvent.IO_ERROR));
		}
		
		public function unLoad() : void {
			if (loadSwfComplete) {
				try {
					loader.unload();
					if (visibleAfterLoaded) {
						removeChild(loader);
					}
					loader = null;
					this.parent.removeChild(this);
				} catch (e:Error) {
					
				}
				loadSwfComplete = false;
			}
		}

	}
}
 
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
	layout="absolute"
	width="400" height="250" 
	xmlns:myflex="myflex"
	backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#FBD6B5, #793503]">
	
	<mx:Script>
		[CDATA[

			import mx.controls.Alert;
			import myflex.ExternalSwfLoader;

			[Bindable]
			private var externalSwfLoader : ExternalSwfLoader;
		
			private var flashMovieClip : MovieClip;
			
			private var externalSwfUrl : String = "flashbutton.swf";
			
			public function loadFlashSwf() : void {
				if (externalSwfLoader == null) {
					externalSwfLoader = new ExternalSwfLoader();
					externalSwfLoader.addEventListener(IOErrorEvent.IO_ERROR, onIoErrorHandle);
					externalSwfLoader.addEventListener(Event.COMPLETE, onCompleteHandle);
					mainContainer.addChild(externalSwfLoader);
				}
				externalSwfLoader.loadSwf(externalSwfUrl);
				
				externalSwfLoader.setStyle("horizontalCenter", 0);
				externalSwfLoader.setStyle("verticalCenter", 0);
			}
			
			private function onCompleteHandle(e:Event) : void {
				try {
					if (externalSwfLoader.content != null) {
						flashMovieClip = externalSwfLoader.content as MovieClip;
						addListenersForMovieClip(flashMovieClip);
						
						Alert.show("Load swf successful. please click button in swf.");
					}
				} catch (e:Error) {
					Alert.show(e.message);
				}
			}
			
			private function onIoErrorHandle(e:Event) : void {
				Alert.show("IO_ERROR");
			}
			
			private function addListenersForMovieClip(movieClip : MovieClip) : void {
				movieClip.addEventListener("EventGoTOParent", onTestEventHandle);
			}
			
			private function onTestEventHandle(e:Event) : void {
				Alert.show("get flash swf event!");
			}
			
			public function sendTextToSwf() : void {
				try {
					if (externalSwfLoader != null && externalSwfLoader.content != null) {
						flashMovieClip.setMenu(flashtext.text);
					}
				} catch (e:Error) {
					Alert.show(e.message);
				}
			}
			
		]]
	</mx:Script>
	
	<mx:ApplicationControlBar left="15" top="15" right="15" fillAlphas="[1.0, 0.11]" fillColors="[#B2B1B1, #FDFCFC]" cornerRadius="8">
		<mx:LinkButton label="Load Swf" click="loadFlashSwf()"/>
		<mx:Spacer width="100%"/>
		<mx:TextInput id="flashtext" width="110"/>
		<mx:LinkButton label="Send text to Swf" click="sendTextToSwf()"/>
	</mx:ApplicationControlBar>
	
	<mx:Canvas id="mainContainer" top="56" bottom="10" left="15" right="15">
	</mx:Canvas>
	
</mx:Application>

 

参考

http://hi.baidu.com/ajamos/blog/item/70dca63b77e782ed15cecbc5.html

分享到:
评论
2 楼 easonet 2009-04-04  
测试了一下有两个问题不解

如何控制加载进来的SWF文件的尺寸呢?

        private function completeHandler(event:Event) : void {  
            this.loadSwfComplete = true;  
            this.width = loader.content.width;  
            this.height = loader.content.height;  
            dispatchEvent(new Event(Event.COMPLETE));  
        } 
改为
            loader.content.width = 1024;          loader.content.height = 768;
可以改变swf文件的尺寸,可是loader.content.width的单位好相关不是像素
不知道怎么转换的我709x359的FLASH被转换了152.25 和54

另外还有一个问题
private function onCompleteHandle(e:Event):void{
try{
if(externalSwfLoader.content!=null){
flashMovieClip = externalSwfLoader.content as MovieClip;
//这里得到的flashMovvieClip的结果为null 执行下条语句就报错了.
addListenersForMovieClip(flashMovieClip);
//
Alert.show("Load swf successful.please click button in swf.");
}
}catch(e:Error){
Alert.show(e.message);
}
}

不知道是不是我SWF文件的问题,能否帮忙看看,或者将这个DEMO给我发一份或者提供一下您调用的swf文件。
我的邮箱是easonet@163.com

谢谢。
1 楼 hw--006 2009-03-12  
有注释就更好了!

相关推荐

    Flex4+Flash CS3+TweenLite简单实现打苍蝇游戏

    为了将Flash中的图形引入Flex,我们需要在MXML文件中创建一个SpriteVisualElement,然后加载library.swf中的苍蝇符号。这样,苍蝇就可以在Flex应用中显示和交互。 TweenLite的集成则需要通过引入其AS3库文件。在...

    让Flex3与flashcs3珠联璧合

    - **导入Flash资源**:在Flash CS3中制作完成的动画或图形,导出为SWF格式,然后将其添加到Flex项目的assets目录下。 - **在Flex中使用Flash内容**:在Flex的MXML文件中,使用`&lt;mx:SWFLoader&gt;`或`&lt;s:SWFLoader&gt;`...

    Flash CS3 中fl.*类库在 FB 中如何使用

    `fl.*`类库是Flash Professional CS3中的核心组件,它们提供了用于图形绘制、动画制作、事件处理等多种功能的类。这些类对于创建复杂的交互式用户界面和动画序列至关重要。 当我们谈论"Flash CS3 中fl.*类库在 FB ...

    Flex入门资料 flex3.0

    9. **Flex应用部署**:讨论如何将Flex应用打包为SWF文件或AIR应用程序,并发布到Web服务器或桌面。 《Flex_QuickStart.pdf》可能是快速上手指南,会提供更具体的步骤和实例,帮助开发者快速了解和开始使用Flex 3.0...

    Actionscript3.0基础语法

    - **AVM1Movie**:表示ActionScript 1.0/2.0中创建并已加载的SWF文件。 - **Bitmap**:用于加载和显示位图图像,并可以与BitmapData类结合创建自定义图像。 - **MorphShape**:用于形状补间动画,但在AS3中不能...

    flex_Actionscript3

    - **嵌入内容**:将资源直接嵌入到SWF文件中。 #### 五、基本运动 ##### 5.1 速度 - **向量和速度**:使用向量表示物体的速度。 - **一个轴上的速度**:只考虑单个方向的速度。 - **两个轴上的速度**:考虑X轴和Y...

    MakingThingsMove中文版

    - **嵌入内容**:将资源直接嵌入到SWF文件中。 ##### 4.7 本章重点公式 - 列举了本章中涉及的关键公式。 ##### 4.8 小结 - 总结了渲染技术在动画制作中的作用和实现方法。 #### 五、基本运动 ##### 5.1 速度和加...

Global site tag (gtag.js) - Google Analytics