自定义事件会有派发和接收的,也就是所谓的订阅发布设计模式思想。
进入正文:
一、自定义事件ChangeEvent
类,分别定义发布和接收事件。
/**自定义事件 */
class ChangeEvent extends egret.Event {
public static Sub: string = "发布";
public static Res = "接收";
public constructor(type: string, bubbles: boolean = false, cancelable: boolean = false) {
super(type, bubbles, cancelable);
}
}
二、发布者Head
类,发布者内部有公开的fabu
方法,实例化发布类型,因为是发布者所以实例化ChangeEvent.Sub
,this.dispatchEvent
使用指定的 EventDispatcher
对象来抛出 Event 事件对象。抛出实例化的自定义事件,使发布可执行。
/**发布者 */
class Head extends egret.Sprite {
public constructor() {
super();
}
public fabu() {
console.log("我是发布者,我发布了");
let sub: ChangeEvent = new ChangeEvent(ChangeEvent.Sub);
//执行发布事件
this.dispatchEvent(sub);
}
}
三、订阅者(接受者)类,接收者收到发布者的发布执行收到
命令,并通知系统此次发布接受完毕,用this.dispatchEvent(res)
抛出接收者事件,使此事件可执行。
/** 接收者 */
class Jie extends egret.Sprite {
public constructor() {
super();
}
public receive() {
console.log("我是接受者,收到");
let res: ChangeEvent = new ChangeEvent(ChangeEvent.Res);
this.dispatchEvent(res);
}
}
四、最后自定义事件完成发布与接收的绑定。
SystemCombine
class SystemCombine extends egret.Sprite{
public constructor() {
super();
this.init()
}
private init() {
//系统监听发布-接收状态
this.addEventListener(ChangeEvent.Res, this.fabuAndRes, this);
let head: Head = new Head();
let jie: Jie = new Jie();
//接收者监听发布者状态,发布者发布执行jie.receive()
head.addEventListener(ChangeEvent.Sub, jie.receive, this);
//发布者发布
head.fabu();
}
private fabuAndRes() {
console.log("发布接收完毕");
}
}
运行结果:
如果对本文有疑问欢迎大家评论与批评。