`
qiqishou
  • 浏览: 85189 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【原创】flex控制flash元件

    博客分类:
  • flex
阅读更多

最近跟后台研究的hessian协议,通信技术和接口已经基本差不多了,开始转战与前台的合作。

前台做的flash元件要能比较方便的在flex里使用,我的思路大致是这样的。比较“死”的东西做成图片,具有一些方法,相对比较活跃的组件做成.swf,然后在flex里用as3来控制,这样比较方便也比较容易变化和修改。

 

首先flash里制作元件,属性啊方法啊这些名字要沟通好。

 

在flex里有两种使用方法:

第一种方法是用as3直接使用,通过loader加载.swf,然后显示到程序中。这里有个小技巧,flash做的东西直接addchild到flex的容器里是会出现强制类型转换的,不过有一个例外,就是UIComponent,道理可以参看flex类图的继承关系。

 

第二种方法是用SWFLoader加载,如果组件比较少我倾向于这种,因为比较懒,也比较容易布局。。。

 

demo我只做了个控制属性,方法同样是没问题的哈,上代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationPolicy="all" creationComplete="init()">
	<mx:Script>
		<![CDATA[
		import mx.core.UIComponent;
			private var swfurl:String="我的现金.swf";
			//创建Loader类的实例
			private var context:LoaderContext=new LoaderContext();
			private var loader:Loader=new Loader(); 
			private var myUI:UIComponent = new UIComponent();
			private var something:Object;
			private function init():void
			{
				this.addChild(myUI);
				context.applicationDomain=ApplicationDomain.currentDomain;
				//加载外部的swf库 loader.load()的第2个参数 用来确定是否能使用加载的SWF中的库
				loader.load(new URLRequest(swfurl), context);
				loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
			}
			private function onComplete(e:Event):void
			{
				trace(loader);
				something = loader.content;
				something.myCash.text = 3000;
				myUI.x = 300;
				myUI.y = 300;
				myUI.addChild(loader);
			}
			private function cc():void
			{
				var ss:Object = mm.content;
				ss.myCash.text =50000;
			}
			private function addMoney():void
			{
				var ss:Object = mm.content;
				ss.myCash.text = int(ss.myCash.text) + 10000;
			}
		]]>
	</mx:Script>
	<mx:SWFLoader id="mm" source="我的现金.swf" creationComplete="cc()">
		
	</mx:SWFLoader>
	<mx:Button x="273" y="10" label="+10000" click="addMoney()"/>
</mx:Application>

 

 更进一步,可以由flash提供一个类库,里面可以有多个元件,来重复使用资源:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
				creationComplete="init()"
				layout="absolute">
	<mx:Script>
		<![CDATA[
			import mx.core.UIComponent;
			import flash.display.Loader;
			import flash.display.Sprite;
			import flash.net.URLRequest;
			import flash.events.Event;
			//
			import flash.system.ApplicationDomain;
			import flash.utils.getDefinitionByName;
			import flash.display.MovieClip;
			import flash.system.LoaderContext;
			/**
			 * ...
			 * @author 齐齐兽
			 * QQ:649723623
			 *
			 * 实现库的重复利用
			 */
			//库资源的地址
			private var myUI:UIComponent = new UIComponent();
			private var swfurl:String="element.swf";
			//创建Loader类的实例
			private var context:LoaderContext=new LoaderContext();

			private var loader:Loader=new Loader(); 

			public function init():void
			{
				//指定为当期域
				this.addChild(myUI);
				context.applicationDomain=ApplicationDomain.currentDomain;
				//加载外部的swf库 loader.load()的第2个参数 用来确定是否能使用加载的SWF中的库
				loader.load(new URLRequest(swfurl), context);
				loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
			}

			private function onComplete(e:Event):void
			{
				//得到类定义    MCExample  aaaa
				var className:Class=ApplicationDomain.currentDomain.getDefinition("aaaa") as Class;
				//从库中导出资源    
				var mc:MovieClip=new className();
				//放到场景中间
				mc.x=275;
				mc.y=200;
				//添加到显示列表
				myUI.addChild(mc);
			}
		]]>
	</mx:Script>
</mx:Application>

 附件是第一个Demo的flash元件,放在src目录下即可

3
1
分享到:
评论
1 楼 godlg 2012-06-07  

相关推荐

Global site tag (gtag.js) - Google Analytics