import { _decorator, Component, Node } from 'cc';
const { ccclass, property } = _decorator;
interface IEvenData {
func: Function;
target: any;
}
interface IEven {
[eventName: string]: IEvenData[];
}
@ccclass('CustomEventListener')
export class CustomEventListener extends Component {
public static handle: IEven = {};
//注册事件/监听
public static on(eventName: string, cb: Function, target?: any) {
if (!this.handle[eventName]) {
this.handle[eventName] = [];
}
const data: IEvenData = { func: cb, target };
this.handle[eventName].push(data);
}
//注销事件/取消监听
public static off(eventName: string, cb: Function, target?: any) {
const list = this.handle[eventName];
if (!list || list.length <= 0) {
return;
}
for (let i = 0; i < list.length; i++) {
const event = list[i];
if (event.func === cb && (!target || target === event.target)) {
list.splice(i,1);
break;
}
}
}
//事件派发
public static dispatchEvent(eventName:string,...arg:any){
const list = this.handle[eventName];
if (!list || list.length <= 0) {
return;
}
for (let i = 0; i < list.length; i++) {
const event = list[i];
event.func.apply(event.target,arg);
}
}
}
【Cocos笔记2】事件
最新推荐文章于 2023-09-16 16:49:11 发布