当前位置:文档之家› Flex之自定义事件教程

Flex之自定义事件教程

学习as3.0,其实很大程度上是对两大机制进行熟悉,1.事件机制 2.显示对象,
对于事件机制,很多初学者知其言,未必知其所以言
为此,写下此篇文章,贡献一下!!

本教程初始编写日期 2011-08-27 AM 02:00,写作初衷是涉及面向对象思想层面 进行事件机制的综合讲解!!
可以好肯定地说,只要是用心学习了as3的事件机制和显示架构(显示对象类层次分布)两大知识点,则对于 面向对象编程 思

想是一个不可多得的质和量的提高!!


本帖内容提要:
1.简述事件前世今生
2.AS3.0基本事件机制
3.AS3.0事件流机制
4.AS3.0自定义事件机制
5.设计模式“观察者模式” VS AS3事件机制


声明:本教程贴由 秋色烽火(HSZZLZL) 负责编写,
首发 蓝色理想-经典论坛,相应转载于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;
}



[如图所示] 如图所示,运行后点击按钮,对应的按钮就会控制相应的mc作右移运动





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:这阶段是很多初学者的基本理解,要为什么东西加鼠标事件,就写对应代码就可以了,反正有多少个按钮就加多少个鼠标

事件代码。



写代码时最怕的就是需求更改,而需求更改就像给代码松一松土,一松土,如果有问题就肯定会显现出来!!!


========================================================================
2011年8月28日,早上五点,趴在床上想了又想,从27号早上没头绪开始,脑里就想着如何把这个 1.基本事件机制 说清楚,



不至于过于复杂,想啊想,想啊想,终于有灵感了,给我想到了一个名词,good,就从这开始讲吧, “事件回调机制”



对于事件处理来说,我们习惯的理解就是


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 += 距离;
}

相关主题
文本预览
相关文档 最新文档