flex自定义事件的学习
学习flex自定义事件,其实很大程度上是对两大机制进行熟悉,1.事件机制 2.显示对象, 对于事件机制,很多初学者知其言,未必知其所以言 为此,写下此篇文章,贡献一下!! 可以好肯定地说,只要是用心学习了flex自定义事件和显示架构(显示对象类层次分布)两大知识点,则对于 面向对象编程思想是一个不可多得的质和量的提高!! 本帖内容提要: 1.简述事件前世今生 2.AS3.0基本事件机制 3.AS3.0事件流机制 4.AS3.0自定义事件机制 5.设计模式“观察者模式” VS ?AS3事件机制 本帖所有附件中FLA文件均使用Flash CS3编写,请使用CS3或CS3以上版本打开 =========================================== 1.简述事件前世今生 首先我们来回顾一下as2、as3相关的基本控制代码, 假设场景中有一个影片剪辑(mc_a),有一个按钮(btn_mca),我们需要点击按钮时控制mc的_x属性自加5,代码分两种情况如下 as2.0: ==================================== //代码写在按钮身上 on(release){ ? ? ? //trace("代码写在按钮身上,当前this指向:" + this); ? ? ? mc_a._x+=5; } //代码写在时间轴上 btn_mcb.onRelease = function(){ ? ? ? //trace("代码写在时间轴上,当前按钮的处理函数this指向:" + this); ? ? ? this._parent.mc_b._x+=5; } as3.0: ==================================== //代码只可能写在时间轴或类文件中,此处为教学暂时仅讨论时间轴代码 btn_mca.addEventListener(MouseEvent.CLICK,onClick_func); function onClick_func(_evt:MouseEvent):void{ ? ? ? //_evt.currentTarget._x += 5; ? ? ? mc_a.x += 5; } 看了上面的代码,是不是很熟悉呢? 我们写代码的时候,总喜欢去访问、去干预别人(其它对象)的行为 会用很多_root、很多_parent,这对于编写过as2.0的人来,应该不陌生了吧 PS:这阶段是很多初学者的基本理解,要为什么东西加鼠标事件,就写对应代码就可以了,反正有多少个按钮就加多少个鼠标 事件代码。 写代码时最怕的就是需求更改,而需求更改就像给代码松一松土,一松土,如果有问题就肯定会显现出来!!! ======================================================================== 对于事件处理来说,我们习惯的理解就是 btn_mca.addEventListener(MouseEvent.CLICK,onClick_func); //元件.侦听(鼠标事件.单击事件,处理函数); function onClick_func(_evt:MouseEvent):void{ // 处理函数(_evt:事件类型):void{ ? ? ? mc_a.x += 5; ? ? ? //具体处理代码 } 反正做什么事就写什么代码,其实这就是 面向过程编程 中的先入为主式编程,一下笔就考虑具体功能, 对于一般处理固化的代码来说没什么,但出现如下的情况下的时候,我们就需要考虑一个事件回调的问题了 我们在这里做一个小游戏,如图所示,一个按钮+三个影片剪辑 要实现的效果是,用鼠标点击对应的影片剪辑,然后点击按钮,对应的影片剪辑就会移动,并显示对应自己的x坐标信息. 按钮实例名是 btn_moveMC ,影片剪辑实例名分别是 mc_a mc_b mc_c ,影片剪辑内还有一个动态文本框,实例名是txt_Info as2.0: ==================================== var _obj:MovieClip = mc_a; //初始化绑定 mc_a var 距离:Number = 10; mc_a.onRelease = function(){ ? ? ? _obj = mc_a; } mc_b.onRelease = function(){ ? ? ? _obj = mc_b; } mc_c.onRelease = function(){ ? ? ? _obj = mc_c; } btn_moveMC.onRelease = function(){ ? ? ? _obj.txt_Info.text = int(_obj._x); ? ? ? _obj._x += 距离; } as3.0: ==================================== var _obj:MovieClip = mc_a; //初始化绑定 mc_a var 距离:uint = 10; mc_a.buttonMode = true; mc_b.buttonMode = true; mc_c.buttonMode = true; mc_a.addEventListener(MouseEvent.CLICK,onClick_mcA_func); mc_b.addEventListener(MouseEvent.CLICK,onClick_mcB_func); mc_c.addEventListener(MouseEvent.CLICK,onClick_mcC_func); btn_moveMC.addEventListener(MouseEvent.CLICK,onClick_func); function onClick_mcA_func(_evt:MouseEvent):void{ ? ? ? _obj = mc_a; } function onClick_mcB_func(_evt:MouseEvent):void{ ? ? ? _obj = mc_b; } function onClick_mcC_func(_evt:MouseEvent):void{ ? ? ? _obj = mc_c; } function onClick_func(_evt:MouseEvent):void{ ? ? ? _obj.txt_Info.text = uint(_obj.x); ? ? ? _obj.x += 距离; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |