ImageVerifierCode 换一换
你正在下载:

flex.docx

[预览]
格式:DOCX , 页数:57 ,大小:40.74KB ,
资源ID:5714800      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5714800.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(flex.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

flex.docx

1、flexIT博客网-真才实料才是最真-文章分类-FLEX Dream have no limit AS3应用程序模块化开发与ApplicationDomain当程序越来越大,我们需要把它拆分成多个swf,在需要的时候动态加载。拆分时应该尽量把不同的类编译进唯一的swf,避免因swf文件增多而使整个程序的文件尺寸增大。按此原则可以拆分出以下两种swf,借助 ApplicationDomain 共享其代码和资源。 * 模块(Module) 按照程序逻辑,可以拆分出多个“功能模块”,如“注册”、“管理”等等;按照游戏或社区类程序的关卡或场景,可以拆分出不同的“场景模块”。这些模块不是主程序运行必须的

2、,只在需要的时候加载。 * 运行时共享库(RSL) 主场景或者多个模块通用的资源,比如位图、声音、设计好的页面元素等,可作为“库”在主程序运行前加载。可以整套更换的皮肤(skin)只需先加载一套。 ApplicationDomain 是存放AS3定义(包括类、方法、接口等)的容器。使用Loader类加载swf时可以通过指定 ApplicationDomain 参数将swf加载到不同的域(Domain):var loader : Loader = new Loader();var context : LoaderContext = new LoaderContext();/* 加载到子域(模块)

3、 */context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);/* 加载到同域(共享库) */context.applicationDomain = ApplicationDomain.currentDomain;/* 加载到新域(独立运行的程序或模块) */context.applicationDomain = new ApplicationDomain();loader.load(new URLRequest(loaded.swf), context);ApplicationDom

4、ain使用类似于显示列表(DisplayList)的树形结构。 相对于舞台(Stage) ,可以认为 ApplicationDomain 最根部的是系统域(system domain),包含 Flash Player 核心类定义。主程序所在的域(以下简称主域)就是它唯一的子域,类似于Stage下的文档类(Document Class)。一个fla文档类里代码:this.stage.addChild(mySprite);this.addChild(myMC);this.addChild(myShape);运行后的显示列表:01.gifApplicationDomain 的类似结构:02.gif

5、* 加载到子域(模块) 类似于“继承”,子域可以直接获得父域所有的类定义,反之父域得不到子域的。和继承关系不同的是,如果子域中有和父域同名的类,子域定义会被忽略而使用父域的定义。 * 加载到同域(运行时共享库) 类似集合里的合并关系。被加载swf里的所有类定义被合并到当前域中可以直接使用。和加载到子域相同,和当前域同名的定义也会被忽略。 * 加载到新域(独立运行的程序或模块) swf载入指定域之前,先要检查该域及其父域中是否存在同名类,重复定义一概忽略。如果加载别人写的程序,或者使用旧版本的主程序加载新版本的模块,为避免类名冲突就要加载到新域独立运行以使用自己的类。 模块加载到同域不是一样可以

6、吗?为何要加载到子域呢?好处就在于,卸载一个加载到子域的模块时,只要确保清除所有到该模块的引用,模块的所有类定义将被垃圾回收(Garbage Collection)。有两种方式可以访问 ApplicationDomain : * ApplicationDomain.currentDomain currentDomain是ApplicationDomain的静态变量,表示当前代码所在的域。该变量很奇特,在主程序里指向主域,在加载到子域的模块里则指向该模块所在的子域。虽然 ApplicationDomain 有个 parentDomain 属性,但子域已经自动获得了父域的类定义,所以通过 Appl

7、icationDomain.currentDomain 就可以获取父域定义了包括主程序和加载到主域的共享库。(注:系统域不可直接访问,主域和所有新域即系统域子域的parentDomain属性为null) * LoaderInfo类的applicationDomain属性 此方式可以访问任何方式加载的swf的 ApplicationDomain。对于主程序来说,加载到同域的库定义已经存在于 ApplicationDomain.currentDomain ,而模块的类主程序一般用不到。所以这种方式个人不推荐使用。 ApplicationDomain 的 hasDefinition() 方法判断某定

8、义是否存在,getDefinition() 方法获取指定的定义。下面以一个 例子 来介绍 ApplicationDomain 的具体用法和应用程序的拆分。本例 有四个swf,shell.swf是主程序,lib.swf是共享库,login.swf和result.swf分别是“登录”和“结果”模块,所有的视图元件都在共享库中。实际开发时可能有很多库,比如“位图库”、“音效库”、“模型通用库”等。“通用库”里存放多个模块共用的资源,比如此例中的背景元素。而各个模块独有的资源还是放在各自的swf中。主程序首先将共享库加载到同域,完成后将“登录模块”加载到子域。主程序可以像操作普通的视觉对象(Displ

9、ayObject)一样操作加载的模块:监听事件、调用方法。因为编译器不会识别未定义的类,为使用强类型,建议为主类和模型定义相应的接口,使用少量的重复代码协助编程。private function showModule(p_module : IModule) : void if (this.m_moduleList0 = login.swf) p_module.show(this); p_module.addEventListener(login, this.onLogin); else p_module.show(this, this.m_userName); 模块“继承”了主程序和共享库的所

10、有类和资源,可以通过 ApplicationDomain.currentDomain.getDefinition() 来获取相应的类。注意获取不存在的类会抛出一个 ReferenceError。protected function getClass(p_name : String) : Class try return ApplicationDomain.currentDomain.getDefinition(p_name) as Class; catch (p_e : ReferenceError) trace(定义 + p_name + 不存在); return null; return

11、null;登录模块获取库中的界面元素,并在点击按钮后抛出事件。Event类不允许带参数,必须使用继承Event的自定义事件抛出参数。主程序可以把模块的自定义事件也编译进去(这样就增大了整个程序的文件尺寸),或者让监听模块事件的函数接受一个Objcet参数,以获取其动态属性。private function onLogin(p_e : Object) : void this.m_userName = p_e.userName; var login : IModule = p_e.currentTarget; login.removeEventListener(login, this.onLogi

12、n); login.dispose(); this.loadSwf();主程序收到事件之后卸载注册模块,加载“结果模块”到子域,并将登录模块传出的”userName”参数传给结果模块。public function show(p_parent : DisplayObjectContainer, . rest) : void var libClass : Class = this.getClass(net.eidiot.appDomainDemo.Libaray); if (libClass != null) this.initUi(libClass, rest);override protec

13、ted function initUi(p_libClass : Class, p_rest : Array = null) : void this.addUi(this.getClass(p_libClass.BG_NAME), 结果); var resultFunc : Function = p_libClass.getResult; var userName : String = p_rest0; this.addChild(resultFunc(userName);注意initUi()方法分别使用了共享库中Libaray类的静态属性BG_NAME和静态方法getResult()。但是直

14、接调用此静态方法会报错,可以先用 resultFunc 变量取出此方法。详细内容请参考 源代码。gavinkin555 2007-09-18 10:14 发表评论Flex 2 DataGrid 的 Change和Click事件在CFLEX上看到一则小经验,就是关于DataGrid控件的方法。如果你不想把DataGrid中的数据绑定到控件上的话,你还可以用触发事件的方式来处理。你可以使用Click事件,也可以使用Change事件,它们基本上没有分别,不过不同的是Click事件用的是event.currentTarget,而Change 则是 event.target。例如,现在我们有一个控件叫s

15、omeControl,它有一个text属性,用来显示你在DataGrid中选中的信息。如果用click事件,这么写DataGrid: public function clickHandler(event:MouseEvent):void someControl.text = event.currentTarge.selectedItem.someDataField; 如果用change事件,这么写DataGrid和脚本: public function changeHandler(event:Event):void someControl.text = event.target.selecte

16、dItem.someDataField; gavinkin555 2007-09-14 15:25 发表评论Flex学习进阶-使用和其他元件关联首先在设计模式下拖拽出需要演示效果的FLEX组件其中包括ComboBox,Button,Panel,Label 将其排列整齐,方便自己看就可以了,代码如下: 下面为添加内容并且将其改变后的值与Label属性值进行绑定为ComboBox添加内容 ComboBox1 ComboBox2 ComboBox3 将两个进行连接:可以在这个时候发布一下看看效果。因为下面会有一些其他效果要体现。有人会问到我要取的值不是ComboBox1,ComboBox2,Comb

17、oBox3怎么办,当然有方法了,需要修改String为Object,再将其data属性为你想要取出的值,改变如下: 再次发布看看这次取的是不是data的值呀。呦,我们的按钮还没有用上呢,你发现了没有,这回要用上代码了ActionScript3.0哦。给大家秀一下: gavinkin555 2007-09-10 15:31 发表评论解决Flex从URL里获取参数的问题最近开始使用Flex进行开发。需要从URL中获取参数,查了好些网页也没有找到适用的方法。但最中还是找到了解决方法,现写出来,与大家分享,节省查阅的时间。 对于FLex使用参数就两个地方(我是个菜鸟,目前就知道两个) ,一个是mx:S

18、cript里,另一个就是组件(如Label或TextInput等)。有如下格式URL:a.swf name=1&pass=2;在组件中使用只要定义好一个变量,然后直接使用name就可以了,而对于mx:Script里则不行。如下: private function initApplication():void trace (this.parameters.name+:+this.parameters.pass); gavinkin555 2007-09-05 20:30 发表评论数组元素随机排序发现flash中好像没有对数组元素进行随机排序的函数, 就自己写了一个. 虽然不是很科学, 起码可以用

19、.- -!调用方法: randomOrder (array)函数会返回一个新数组, 就是该数组随机排序后的结果例子: 程序代码var myArray : Array = a, b, c, dmyArray = randomOrder (myArray ) 程序代码/随机改变数组的排序function randomOrder (targetArray : Array) : Array var arrayLength : Number = targetArray.length / /先创建一个正常顺序的数组 var tempArray1 : Array = for (var i = 0; i ar

20、rayLength; i +) tempArray1 i = i / /再根据上一个数组创建一个随机乱序的数组 var tempArray2 : Array = for (var i = 0; i arrayLength; i +) /从正常顺序数组中随机抽出元素 tempArray2 i = tempArray1.splice (Math.floor (Math.random () * tempArray1.length) , 1) / /最后创建一个临时数组存储 根据上一个乱序的数组从targetArray中取得数据 var tempArray3 : Array = for (var i

21、= 0; i arrayLength; i +) tempArray3 i = targetArray tempArray2 i / /返回最后得出的数组 return tempArray3gavinkin555 2007-09-04 14:03 发表评论Flex2.0数组的使用实例Array-1.2. AK AL AR3.-/ Use Array constructor.var myArray:Array = new Array();myArray.push(one);myArray.push(two);myArray.push(three);trace (myArray); / output: one,two,three/ Use Array literal.var myArray:Array = one, two, three;trace (myArray); / output: one,two,three-

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1