- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面向对象编程学习5
面向对象编程学习
( 五 )
独来读网一
事件处理机制
自定义事件
我们先做一个实例,再说原理,画一个小球,小球的X坐标发生改变,就执行一个函数
代码如下:
//as
package {
import flash.display.Sprite;
import flash.events.Event;
public class Ball extends Sprite {
private var radius:Number
private var color:uint;
private var isX:Boolean;
public function Ball(r:Number=30,c:uint=0xff0000) {
radius=r;
color=c;
init();
}
private function init():void {
graphics.beginGradientFill(radial,[0xffffff,color],[1,1],[0,radius*3]);
graphics.drawCircle(0,0,radius);
graphics.endFill();
}
override public function set x(x1:Number):void {
super.x=x1;
if (isX) {
dispatchEvent(new Event(changex));
}
}
public function set isChangeX(isX:Boolean):void {
this.isX=isX;
}
public function get isChangeX():Boolean {
return isX;
}
}
}
//fla
var ball:Ball=new Ball(20,0x0000ff);
addChild(ball);
ball.y=100;
var a:Number=0;
var n:int=0;
addEventListener(Event.ENTER_FRAME ,fun);
function fun(e:Event) {
if ((n%40)20) {
ball.x=275+Math.cos(a)*150;
a+=0.05;
}
n++;
}
var num:int=20;
var ang:Number=0;
var arr:Array=[];
for (var i:int=0; inum; i++) {
var mc:Sprite=new Ball(10,0xff0000);
addChild(mc);
arr.push(mc);
}
ball.isChangeX=true;
ball.addEventListener(changex,fx);
function fx(e:Event) {
for (var i:int=0; inum; i++) {
arr[i].x=275+Math.cos(i*2*Math.PI/num+ang)*80;
arr[i].y=250+Math.sin(i*2*Math.PI/num+ang)*80;
}
ang+=1;
}
在上面的代码中,画出小球和x属性覆盖可能好理解,不好理解的是:后面ball的x坐标发生一次改变,fx就执行一次函数,x坐标不断发生改变,fx函数就不执行。其实这里定义了一个自定义事件,我们象学其它内置方法一样,不知道它的实现过程,也能用它,
只要你定义的对象继承了EventDispatcher类和复合了EventDispatcher对象或实现IEventDispatcher接口了,因为EventDispatcher类和IEventDispatcher接口中定义了二个方法,分别是:addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void(今天只说前面两个参数)和dispatchEvent(event:Event):Boolean)
这二个方法联合使用时的要求如下:
方法1和方法2是实例对象的两个方法,可在不同的环境中,分别执行,这样就能很好地控制“要执行的函数listener”的执行的时机。先执行方法1,那么什么时候执行方法2,就什么时候执行“要执行的函数listener”。那相同的字符串就是我们平时说的事件类型。
在上面的实例中,实例的x坐标发生改
文档评论(0)