// EventMgr.ts import { EventTarget } from 'cc'; export default class EventMgr { private static _eventMgr: EventMgr = null; private _eventTarget: EventTarget = null; private _listeners: any = null; public static get ins(): EventMgr { if (this._eventMgr == null) { this._eventMgr = new EventMgr(); } return this._eventMgr; } private constructor() { this._eventTarget = new EventTarget(); this._listeners = {}; } /** * 添加事件监听 */ addEventListener(eventType: string, callback: (...args: any[]) => void, target: any) { this._eventTarget.on(eventType, callback, target); } /** * 添加一次性事件监听 */ addEventListenerOnce(eventType: string, callback: (...args: any[]) => void, target: any) { this._eventTarget.once(eventType, callback, target); } /** * 移除事件监听 * 如果只传递 eventType,则移除该类型的所有监听器。 */ removeListener(eventType: string, callback?: (...args: any[]) => void, target?: any) { this._eventTarget.off(eventType, callback, target); } /** * 通过注册对象移除事件监听 */ removeListenerByTarget(target?: any) { this._eventTarget.targetOff(target); } /** * 广播分发事件 * @param eventType * @param userData */ dispatchEvent(eventType: string, userData?: any) { console.log("事件分发", eventType); this._eventTarget.emit(eventType, userData); } }