事件的流程
Egret事件机制包含四个步骤:注册侦听器,发送事件,侦听事件,移除侦听器。且是按顺序执行。
注册侦听器之前需要建立侦听器,侦听器可以是独立的函数,也可以是某一个对象的方法。
注册侦听器使用事件发送者的addEventListener()
将相应的事件分配给侦听器。
public addEventListener(type:string, listener:Function, thisObject:any, useCapture:boolean = false, priority:number = 0)
type:事件类型,必选。
listener:用来处理事件的侦听器,必选。
thisObject:作用域,必选,一般填写this。因为TypeScript与JavaScript的this作用域不同,其this指向也会不同。如果不填写this的话,那么编译后的代码会发生错误。 关于this的问题,可以学习JavaScript中的原型链。
useCapture: 确定侦听器是运行于捕获阶段还是运行于冒泡阶段,可选。设置为 true,则侦听器只在捕获阶段处理事件,而不在冒泡阶段处理事件。设置为 false,则侦听器只在冒泡阶段处理事件。
priority: 事件侦听器的优先级,可选。优先级由一个带符号的整数指定。数字越大,优先级越高。优先级为 n 的所有侦听器会在优先级为 n -1 的侦听器之前得到处理。如果两个或更多个侦听器共享相同的优先级,则按照它们的添加顺序进行处理。默认优先级为 0。
示例:
this.timer.addEventListener(egret.TimerEvent.TIMER,this.timerInterver,this);
this.timer.addEventListener(egret.TimerEvent.TIMER_COMPLETE,this.timerComplete,this);
this.imageButton.touchEnabled = true;
this.imageButton.addEventListener(egret.TouchEvent.TOUCH_TAP,this.onButtonClicked,this,true);
this.sprite.touchEnabled = true;
this.sprite.addEventListener(egret.TouchEvent.TOUCH_TAP,this.onTouchEnd,this,true);
上面示例中,分别为计时器Timer的interver间隔触发监听,Timer完成的监听触发,imageButton点击监听,sprite容器点击监听。
触摸事件
Egret中有专门的触摸事件类,使用触摸事件时,默认需要打开显示对象的触摸开关,即将touchEnabled
设置为true
。