EventMgr.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // EventMgr.ts
  2. import { EventTarget } from 'cc';
  3. export default class EventMgr {
  4. private static _eventMgr: EventMgr = null;
  5. private _eventTarget: EventTarget = null;
  6. private _listeners: any = null;
  7. public static get ins(): EventMgr {
  8. if (this._eventMgr == null) {
  9. this._eventMgr = new EventMgr();
  10. }
  11. return this._eventMgr;
  12. }
  13. private constructor() {
  14. this._eventTarget = new EventTarget();
  15. this._listeners = {};
  16. }
  17. /**
  18. * 添加事件监听
  19. */
  20. addEventListener(eventType: string, callback: (...args: any[]) => void, target: any) {
  21. this._eventTarget.on(eventType, callback, target);
  22. }
  23. /**
  24. * 添加一次性事件监听
  25. */
  26. addEventListenerOnce(eventType: string, callback: (...args: any[]) => void, target: any) {
  27. this._eventTarget.once(eventType, callback, target);
  28. }
  29. /**
  30. * 移除事件监听
  31. * 如果只传递 eventType,则移除该类型的所有监听器。
  32. */
  33. removeListener(eventType: string, callback?: (...args: any[]) => void, target?: any) {
  34. this._eventTarget.off(eventType, callback, target);
  35. }
  36. /**
  37. * 通过注册对象移除事件监听
  38. */
  39. removeListenerByTarget(target?: any) {
  40. this._eventTarget.targetOff(target);
  41. }
  42. /**
  43. * 广播分发事件
  44. * @param eventType
  45. * @param userData
  46. */
  47. dispatchEvent(eventType: string, userData?: any) {
  48. console.log("事件分发", eventType);
  49. this._eventTarget.emit(eventType, userData);
  50. }
  51. }