`

Flex 使用SWFloader控制SWF元件

 
阅读更多

SWFLoader加载外部swf是一个很好的方法,在进行Flex游戏开发的时候,我们通常会需要很多Flash提供的游戏角色,这些角色可以每个都是一个单独的swf,也可以是存在于一个swf文件中的各个元件。两种方法各有优劣:
1. 单独的swf,每个角色独立性很强,可以在需要的时候才加载。未来修改角色也不会影响到其它角色。但是会有很多的swf需要管理。
2. 每个角色是一个元件,存在于一个swf中,这种方法比较容易管理资源,比较干净。但是修改一个角色都需要重新编译swf,可能会误操作影响其它的元件。而且一次加载所有角色,可能会加载许多不必要的元件,浪费带宽。

两种方法怎么选择,根据项目读者根据以下几个问题考虑:
1. 你的所有元件相互之间是否又很多公用元件?如果是的话,可以考虑放到一个swf中,因为这样会降低所有元件的文件量。
2. 你的所有元件是否都继承同一些类,实现同一些接口,调用同一些类?如果是的话,可以考虑放到一个swf中,这样比较容易管理类包,而且降低swf的文件量,因为共有的类只编译一次。
3. 你的所有元件是否完全独立,没有任何关系?如果是的话,你可以考虑每个角色独立的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()"
			   >
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import mx.controls.SWFLoader;
			import mx.core.UIComponent;
 
			private var swfLoader:SWFLoader = new SWFLoader();
			private function init():void{
				swfLoader.addEventListener(Event.COMPLETE,swfLoadComplete);
				swfLoader.load("assets/fishmomo.swf");
			}
			private function swfLoadComplete(e:Event):void{
				/**
				 * 将整个swf都加载到flex舞台上
				 * 此方法将每个flex要用的资源做成单独的swf,需要时才加载进来
				 */ 
				addElement(swfLoader);
				var swf:MovieClip = swfLoader.content as MovieClip;
				//fish 是 swf主舞台上的一个鱼对象,属性命名为fish
				//调用舞台上fish元件的say方法
				swf.fish.say("Load a swf");
 
				/**
				 * 此方法可以把所有的flex要用的资源放到一个swf中
				 * 把需要在flex中使用的元件链接到一个类,并将此元件拖到flash舞台
				 * 通过类名,随意显示其中一个元件到flex舞台
				 */ 
				var FishSymbol:Object = swfLoader.content.loaderInfo.applicationDomain.getDefinition("Fish");
				var f:MovieClip = new FishSymbol() as MovieClip;
				//调用元件的say方法
				f.say("Load a symbol within a swf");
				var ui:UIComponent = new UIComponent();
				ui.addChild(f);
				addElement(ui);
			}
		]]>
	</fx:Script>
</s:Application>

 http://www.iteye.com/topic/773679/

 

http://anjantek.com/2011/09/04/flex-4-5-spark-datagrid-radio-button-itemrenderer/

分享到:
评论

相关推荐

    swfloader:swf加载器,用于在flex中加载swf文件。可用于组件模块化,加载然后反射得到相应类

    用于在flex中缓存加载swf文件。 可用于组件模块化加载。加载完成的组件,下次加载可直接从SWFCache中根据url获取相应内容,避免重复加载 单个加载方式 var item:SWFItem = new SWFItem(); item.url = "module/...

    FLEX企业应用开发实战.part1

     3.2.4 通过SWFLoader加载Application  3.2.5 域及跨域访问  3.3 Flex Module  3.3.1 创建模块  3.3.2 模块的编辑与编译  3.3.3 模块文件的加载  3.3.4 主应用和模块的交互  3.4 Flex库文件SWC  ...

    FLEX企业应用开发实战.part2

     3.2.4 通过SWFLoader加载Application  3.2.5 域及跨域访问  3.3 Flex Module  3.3.1 创建模块  3.3.2 模块的编辑与编译  3.3.3 模块文件的加载  3.3.4 主应用和模块的交互  3.4 Flex库文件SWC  ...

    flex3的cookbook书籍完整版dpf(包含目录)

    使用SWFLoader载入SWF 2.5节. 设置组件的标签索引 2.6节. 设置控件的labelFunction 2.7节. 提供菜单数据 2.8. 动态填充菜单 2.9节. 为菜单类控件创建事件处理函数 2.10节. 显示一个通知窗口 2.11节. 使用Calendar...

    Flex企业应用开发实战源代码

    再接着详细讲解了BlazeDS框架的使用方法和工作原理,并通过迭代的方式完整地演示一个真实的Flex企业级应用的开发全过程,实战性极强;最后重点探讨Flex应用性能优化等方面的高级知识。值得一提的是,本书公开了作者...

    SWFLoader源代码

    用来加载位图,需要将图片先导入FLASH,放在SWF类远见中。然后通过此类读取。

    Tree与SWFLOAD

    实现了树与swfloader结合,动态显示图片

Global site tag (gtag.js) - Google Analytics