CocosCreator 事件的监听,派发 与销毁

CocosCreator 事件的监听,派发 与销毁

创建一个对象类,用来管理对应的监听

class EventAgs{ //监听对象
name:string =null; //事件名
cb:Function = null; //回调
obj:any = null; //对象
}

创建一个字典用来缓存监听的事件集合
private eventDic:Map<string,Array> = null;

监听事件-》 添加监听

###添加事件
public on(eventName:string, func:Function, obj:any){
let itemArr = this.eventDic.get(eventName);
if(!itemArr){
itemArr = new Array();
}else{
for (let i = 0; i < itemArr.length; i++) {
const item = itemArr[i];
if(item.cb === func && item.obj === obj){
return;
}
}
}

    const data = new EventAgs();
    data.name = eventName;
    data.cb = func;
    data.obj = obj;
    itemArr.push(data);
    this.eventDic.set(eventName, itemArr);
}

###移除事件
//移除事件
public off(eventName:string, func:Function, obj:any){
let itemArr = this.eventDic.get(eventName);
if(itemArr){
for (let i = itemArr.length - 1; i >= 0; i–) {
const item = itemArr[i];
if(item.cb === func && item.obj === obj){
itemArr.splice(i,1);
break;
}
}
}
}

###派发
//触发事件-派发
public dispatcher(eventName:string, argArr?:any){
let itemArr = this.eventDic.get(eventName);
if(itemArr){
for (let i = 0; i < itemArr.length; i++) {
const item = itemArr[i];
if(item.cb && item.obj){
item.cb.apply(item.obj, argArr);
}
}
}
}

完成代码==============》
class EventAgs{ //监听对象
name:string =null; //事件名
cb:Function = null; //回调
obj:any = null; //对象
}

///事件管理器=》 单利
export class EventManager{
private static _instance:EventManager = null;

private eventDic:Map<string,Array<EventAgs>> = null;


constructor(){
    this.eventDic = new Map<string,Array<EventAgs>>();
}

public static getInstane(){
    if(this._instance == null){
        this._instance = new EventManager();
    }

    return this._instance;
}

//添加事件
public on(eventName:string, func:Function, obj:any){
    let itemArr = this.eventDic.get(eventName);
    if(!itemArr){
        itemArr = new Array<EventAgs>();
    }else{
        for (let i = 0; i < itemArr.length; i++) {
            const item = itemArr[i];
            if(item.cb === func && item.obj === obj){
                return;
            }
        }
    }

    const data = new EventAgs();
    data.name = eventName;
    data.cb = func;
    data.obj = obj;
    itemArr.push(data);
    this.eventDic.set(eventName, itemArr);
}

//移除事件
public off(eventName:string, func:Function, obj:any){
    let itemArr = this.eventDic.get(eventName);
    if(itemArr){
        for (let i = itemArr.length - 1; i >= 0; i--) {
            const item = itemArr[i];
            if(item.cb === func && item.obj === obj){
                itemArr.splice(i,1);
                break;
            }
        }
    }
}

//触发事件-派发
public dispatcher(eventName:string, argArr?:any){
    let itemArr = this.eventDic.get(eventName);
    if(itemArr){
        for (let i = 0; i < itemArr.length; i++) {
            const item = itemArr[i];
            if(item.cb && item.obj){
                item.cb.apply(item.obj, argArr);
            }
        }
    }
}

}

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值