From 52fcc36a080ecdc2bb60d4e580d39c365ff0af0f Mon Sep 17 00:00:00 2001 From: donggang <> Date: Wed, 28 Feb 2024 18:16:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0GameComponent=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E5=85=A8=E5=B1=80=E4=BA=8B=E4=BB=B6=E3=80=81=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E4=BA=8B=E4=BB=B6=E7=9B=91=E5=90=AC=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/module/common/GameComponent.ts | 40 ++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/assets/module/common/GameComponent.ts b/assets/module/common/GameComponent.ts index 5b76822..96a8704 100644 --- a/assets/module/common/GameComponent.ts +++ b/assets/module/common/GameComponent.ts @@ -4,7 +4,7 @@ * @LastEditors: dgflash * @LastEditTime: 2022-12-13 11:36:00 */ -import { Asset, Component, Node, __private, _decorator } from "cc"; +import { Asset, Component, EventTouch, Node, __private, _decorator } from "cc"; import { oops } from "../../core/Oops"; import { EventDispatcher } from "../../core/common/event/EventDispatcher"; import { EventMessage, ListenerFunc } from "../../core/common/event/EventMessage"; @@ -198,6 +198,7 @@ export class GameComponent extends Component { } //#endregion + //#region 游戏逻辑事件 /** 监听游戏从后台进入事件 */ protected setEventShow(callback: ListenerFunc) { this.on(EventMessage.GAME_ENTER, callback, this); @@ -223,6 +224,43 @@ export class GameComponent extends Component { this.on(EventMessage.GAME_ORIENTATION, callback, this); } + /** + * 批量设置当前界面按钮事件 + * @example + * this.setButton("Label1", "Label2"); + * + * Label1(event: EventTouch) { console.log(event.target.name); } + * Label2(event: EventTouch) { console.log(event.target.name); } + */ + protected setButton(...args: string[]) { + this.node.on(Node.EventType.TOUCH_END, (event: EventTouch) => { + var func = this[event.target.name]; + if (func) + func(event); + else + console.error(`名为【${event.target.name}】的按钮事件方法不存在`); + }, this); + } + + /** + * 批量设置全局事件 + * @example + * this.setEvent("onGlobal"); + * this.dispatchEvent("onGlobal", "全局事件"); + * + * onGlobal(event: string, args: any) { console.log(args) }; + */ + protected setEvent(...args: string[]) { + for (const name of args) { + var func = this[name]; + if (func) + this.on(name, this[name], this); + else + console.error(`名为【${name}】的全局事方法不存在`); + } + } + //#endregion + protected onDestroy() { // 释放消息对象 if (this._event) {