From 8dde41ea6ca5c6789f871e42e80eacc671b79377 Mon Sep 17 00:00:00 2001 From: donggang <> Date: Mon, 20 May 2024 09:57:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9MessageManager.dispatchEvent?= =?UTF-8?q?=E7=9A=84args=E5=8F=82=E6=95=B0=E5=8F=AF=E6=8E=A5=E5=8F=97?= =?UTF-8?q?=E4=BB=BB=E6=84=8F=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/core/common/event/EventMessage.ts | 2 +- assets/core/common/event/MessageManager.ts | 77 +++++++++++----------- assets/module/common/GameComponent.ts | 2 +- 3 files changed, 40 insertions(+), 41 deletions(-) diff --git a/assets/core/common/event/EventMessage.ts b/assets/core/common/event/EventMessage.ts index e42578a..23f5380 100644 --- a/assets/core/common/event/EventMessage.ts +++ b/assets/core/common/event/EventMessage.ts @@ -10,7 +10,7 @@ * @param event 事件名 * @param args 事件参数 */ -export type ListenerFunc = (event: string, args: any) => void +export type ListenerFunc = (event: string, ...args: any) => void /** 框架内部全局事件 */ export enum EventMessage { diff --git a/assets/core/common/event/MessageManager.ts b/assets/core/common/event/MessageManager.ts index f92f77d..6419663 100644 --- a/assets/core/common/event/MessageManager.ts +++ b/assets/core/common/event/MessageManager.ts @@ -11,7 +11,7 @@ class EventData { * 批量注册、移除全局事件对象 */ export class MessageEventData { - private events: any = {}; + private events: Map> = new Map(); /** * 注册全局事件 @@ -20,16 +20,16 @@ export class MessageEventData { * @param object 侦听函数绑定的作用域对象 */ on(event: string, listener: ListenerFunc, object: object) { - let list: Array = this.events[event]; - if (list == null) { - list = []; - this.events[event] = list; + let eds = this.events.get(event); + if (eds == null) { + eds = []; + this.events.set(event, eds); } - let data: EventData = new EventData(); - data.event = event; - data.listener = listener; - data.object = object; - list.push(data); + let ed: EventData = new EventData(); + ed.event = event; + ed.listener = listener; + ed.object = object; + eds.push(ed); MessageManager.Instance.on(event, listener, object); } @@ -39,14 +39,13 @@ export class MessageEventData { * @param event 事件名 */ off(event: string) { - let ebs: Array = this.events[event]; - if (!ebs) { - return; - } - for (let eb of ebs) { + let eds = this.events.get(event); + if (!eds) return; + + for (let eb of eds) { MessageManager.Instance.off(event, eb.listener, eb.object); } - delete this.events[event]; + this.events.delete(event); } /** @@ -54,8 +53,8 @@ export class MessageEventData { * @param event(string) 事件名 * @param args(any) 事件参数 */ - dispatchEvent(event: string, arg: any = null) { - MessageManager.Instance.dispatchEvent(event, arg); + dispatchEvent(event: string, ...args: any) { + MessageManager.Instance.dispatchEvent(event, args); } /** 清除所有的全局事件监听 */ @@ -109,7 +108,7 @@ export class RoleViewComp extends Component{ export class MessageManager { static readonly Instance: MessageManager = new MessageManager(); - private events: any = {}; + private events: Map> = new Map(); /** * 注册全局事件 @@ -123,15 +122,15 @@ export class MessageManager { return; } - let list: Array = this.events[event]; - if (list == null) { - list = []; - this.events[event] = list; + let eds = this.events.get(event); + if (eds == null) { + eds = []; + this.events.set(event, eds); } - let length = list.length; + let length = eds.length; for (let i = 0; i < length; i++) { - let bin = list[i]; + let bin = eds[i]; if (bin.listener == listener && bin.object == object) { warn(`名为【${event}】的事件重复注册侦听器`); } @@ -142,7 +141,7 @@ export class MessageManager { data.event = event; data.listener = listener; data.object = object; - list.push(data); + eds.push(data); } /** @@ -152,7 +151,7 @@ export class MessageManager { * @param object 侦听函数绑定的作用域对象 */ once(event: string, listener: ListenerFunc, object: object) { - let _listener: any = ($event: string, $args: any) => { + let _listener: any = ($event: string, ...$args: any) => { this.off(event, _listener, object); _listener = null; listener.call(object, $event, $args); @@ -167,24 +166,24 @@ export class MessageManager { * @param object 侦听函数绑定的作用域对象 */ off(event: string, listener: Function, object: object) { - let list: Array = this.events[event]; + let eds = this.events.get(event); - if (!list) { + if (!eds) { log(`名为【${event}】的事件不存在`); return; } - let length = list.length; + let length = eds.length; for (let i = 0; i < length; i++) { - let bin: EventData = list[i]; + let bin: EventData = eds[i]; if (bin.listener == listener && bin.object == object) { - list.splice(i, 1); + eds.splice(i, 1); break; } } - if (list.length == 0) { - delete this.events[event]; + if (eds.length == 0) { + this.events.delete(event); } } @@ -193,14 +192,14 @@ export class MessageManager { * @param event(string) 事件名 * @param args(any) 事件参数 */ - dispatchEvent(event: string, args: any = null) { - let list: Array = this.events[event]; + dispatchEvent(event: string, ...args: any) { + let list = this.events.get(event); if (list != null) { - let temp: Array = list.concat(); - let length = temp.length; + let eds: Array = list.concat(); + let length = eds.length; for (let i = 0; i < length; i++) { - let eventBin = temp[i]; + let eventBin = eds[i]; eventBin.listener.call(eventBin.object, event, args); } } diff --git a/assets/module/common/GameComponent.ts b/assets/module/common/GameComponent.ts index 793da96..edfd0bc 100644 --- a/assets/module/common/GameComponent.ts +++ b/assets/module/common/GameComponent.ts @@ -84,7 +84,7 @@ export class GameComponent extends Component { * @param type 资源类型 * @param bundleName 远程资源包名 */ - getRes(path: string, type?: __private._types_globals__Constructor | null, bundleName?: string): T | null { + getRes(path: string, type?: __private.__types_globals__Constructor | null, bundleName?: string): T | null { return oops.res.get(path, type, bundleName); }