《面向对象编程学习27554.pdf》由会员分享,可在线阅读,更多相关《面向对象编程学习27554.pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、面向对象编程学习(五)独来读网一 事件处理机制 一,自定义事件 我们先做一个实例,再说原理,画一个小球,小球的 X 坐标发生改变,就执行一个函数 代码如下:=275+(i*2*num+ang)*80;arri.y=250+(i*2*num+ang)*80;ang+=1;在上面的代码中,画出小球和 x 属性覆盖可能好理解,不好理解的是:后面ball 的 x 坐标发生一次改变,fx 就执行一次函数,x 坐标不断发生改变,fx 函数就不执行。其实这里定义了一个自定义事件,我们象学其它内置方法一样,不知道它的实现过程,也能用它,只要你定义的对象继承了 EventDispatcher 类和复合了 Eve
2、ntDispatcher 对象或实现 IEventDispatcher 接口了,因为 EventDispatcher 类和 IEventDispatcher 接口中定义了二个方法,分别是:(type:,listener:,useCapture:=false,priority:=0,useWeakReference:=false):(今天只说前面两个参数)和(event:):)这二个方法联合使用时的要求如下:方法 1 和方法 2 是实例对象的两个方法,可在不同的环境中,分别执行,这样就能很好地控制“要执行的函数 listener”的执行的时机。先执行方法 1,那么什么时候执行方法 2,就什么时候
3、执行“要执行的函数listener”。那相同的字符串就是我们平时说的事件类型。在上面的实例中,实例的 x 坐标发生改变,override public function set x(x1:Number):void =x1;if(isX)(new Event(changex);就是调用了:(new Event(changex);,该方法前面的 this 就是实例 ball,这方法一旦调用,就执行(changex,fx);中 fx 的函数。为什么 Ball 类的实例能有 addEventListener,dispatchEvent 方法是因为 Ball extends Sprite,Sprite
4、又继承了 EventDispatcher 类。二,模拟事件机制原理 为了能理解这两个方法的原理,现在我们不用它俩,自己写出方法的实现过程。建一个事件类,为了不与内置的发生冲突,事件类名为:EventE package public class EventE public static const CHANGEX:String=changex;private var _target:Object;private var _type:String;public function EventE(s:String)_type=s;public function get type():String re
5、turn _type;public function get target():Object return _target;public function set target(m:Object):void _target=m;Ball 类,现在我们不用继承的和 dispatchEvent 方法,为了不发生冲突,分别改为:addEvent 和 dispatch,下面代码粗体部分,为我们模拟的方法,package import import public class Ball extends Sprite private var radius:Number;private var color:u
6、int;private var isX:Boolean;private var fun:Function;private var str:String;public function Ball(r:Number=30,c:uint=0 xff0000)radius=r;color=c;init();private function init():void (radial,0 xffffff,color,1,1,0,radius*3);(0,0,radius);();override public function set x(x1:Number):void =x1;if(isX)dispatc
7、h(new EventE);public function set isChangeX(isX:Boolean):void =isX;public function get isChangeX():Boolean return isX;public function addEvent(s:String,f:Function)str=s;fun=f;public function dispatch(e:EventE)if(str=this;fun(e);=275+(i*2*num+ang)*80;arri.y=250+(i*2*num+ang)*80;ang+=1;上述代码对事件机制做了一个简单的模拟,现在我们通过下面的图把事件机制的一些定义找到,并理解这些定义所描述是什么:我们的目的是让下面的 ff 函数什么时候执行。只要执行 实例.dispatch(new EventE);ff 函数就会执行。希望上面所述对您有所帮助。三,实例 我们计划建一个能加载图片的类,给你一些网址,利用这个类的功能,放入网址返回一个数组,这个数组里的元素就是我们要的图片,并且是显示对象。=*(i%4)+75;arrPicsi.y=*(i/4)+50;addChild(arrPicsi);2009 年 5 月 29 日星期五
限制150内