From d926c08582beba21becb84ca588d7da8fbaa64e7 Mon Sep 17 00:00:00 2001 From: panFD Date: Sat, 13 Jun 2026 16:56:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(ui):=20=E4=B8=BA=E6=89=80=E6=9C=89?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E6=B7=BB=E5=8A=A0=E5=85=A8=E5=B1=80=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E9=9F=B3=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 重构按钮点击音效添加方式,通过重写Button原型的_onTouchEnded方法实现全局注入 2. 移除各业务组件中手动添加的按钮音效播放代码,统一音效播放逻辑 --- assets/script/game/hero/HeroViewComp.ts | 1 + assets/script/game/initialize/Initialize.ts | 15 ++++++++++++++- assets/script/game/map/MissionCardComp.ts | 3 +++ assets/script/game/map/MissionComp.ts | 2 ++ assets/script/game/map/SkillBoxComp.ts | 1 + 5 files changed, 21 insertions(+), 1 deletion(-) diff --git a/assets/script/game/hero/HeroViewComp.ts b/assets/script/game/hero/HeroViewComp.ts index b94718c4..d83b4833 100644 --- a/assets/script/game/hero/HeroViewComp.ts +++ b/assets/script/game/hero/HeroViewComp.ts @@ -89,6 +89,7 @@ export class HeroViewComp extends CCComp { private onHeroClicked() { if (!this.model) return; if (this.model.fac !== FacSet.HERO) return; + oops.audio.playEffect("music/button"); const eid = this.ent?.eid; if (!eid) return; diff --git a/assets/script/game/initialize/Initialize.ts b/assets/script/game/initialize/Initialize.ts index ebcf8728..20c90578 100644 --- a/assets/script/game/initialize/Initialize.ts +++ b/assets/script/game/initialize/Initialize.ts @@ -4,7 +4,7 @@ * @LastEditors: dgflash * @LastEditTime: 2022-08-17 12:38:59 */ -import { Node } from "cc"; +import { Node, Button } from "cc"; import { UICallbacks } from "../../../../extensions/oops-plugin-framework/assets/core/gui/layer/Defines"; import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops"; import { AsyncQueue, NextFunction } from "../../../../extensions/oops-plugin-framework/assets/libs/collection/AsyncQueue"; @@ -27,6 +27,19 @@ export class Initialize extends ecs.Entity { debugMode: boolean = false; // 是否启用调试模式 protected init() { var queue: AsyncQueue = new AsyncQueue(); + + // --- 全局注入:为所有 Button 组件增加点击音效 --- + const originalOnTouchEnded = Button.prototype["_onTouchEnded"]; + if (originalOnTouchEnded) { + Button.prototype["_onTouchEnded"] = function(event) { + if (this.interactable && this.node && this.node.activeInHierarchy) { + oops.audio.playEffect("music/button"); + } + originalOnTouchEnded.call(this, event); + }; + } + // --------------------------------------------- + // 加载自定义资 this.loadCustom(queue); // 加载多语言包 diff --git a/assets/script/game/map/MissionCardComp.ts b/assets/script/game/map/MissionCardComp.ts index 56e461ce..77fe2a82 100644 --- a/assets/script/game/map/MissionCardComp.ts +++ b/assets/script/game/map/MissionCardComp.ts @@ -643,6 +643,7 @@ export class MissionCardComp extends CCComp { } /** 抽卡按钮释放 → 执行抽卡逻辑 */ private onDrawTouchEnd() { + oops.audio.playEffect("music/button"); this.playButtonClickAnim(this.cards_chou, () => this.onClickDraw()); } /** 抽卡按钮取消 → 恢复缩放 */ @@ -655,6 +656,7 @@ export class MissionCardComp extends CCComp { this.playButtonPressAnim(this.skill_refresh); } private onSkillDrawTouchEnd() { + oops.audio.playEffect("music/button"); this.playButtonClickAnim(this.skill_refresh, () => this.onClickSkillRefresh()); } private onSkillDrawTouchCancel() { @@ -665,6 +667,7 @@ export class MissionCardComp extends CCComp { this.playButtonPressAnim(this.skill_ad_refresh); } private onSkillAdDrawTouchEnd() { + oops.audio.playEffect("music/button"); this.playButtonClickAnim(this.skill_ad_refresh, () => this.onClickSkillAdRefresh()); } private onSkillAdDrawTouchCancel() { diff --git a/assets/script/game/map/MissionComp.ts b/assets/script/game/map/MissionComp.ts index 909639a5..09b31a3f 100644 --- a/assets/script/game/map/MissionComp.ts +++ b/assets/script/game/map/MissionComp.ts @@ -640,6 +640,8 @@ export class MissionComp extends CCComp { if (!smc.mission.play) return; if (smc.mission.pause) return; if (this.currentPhase !== MissionPhase.Prepare) return; + + oops.audio.playEffect("music/button"); this.to_fight(); } diff --git a/assets/script/game/map/SkillBoxComp.ts b/assets/script/game/map/SkillBoxComp.ts index 8f91d4f7..d3506431 100644 --- a/assets/script/game/map/SkillBoxComp.ts +++ b/assets/script/game/map/SkillBoxComp.ts @@ -117,6 +117,7 @@ export class SkillBoxComp extends CCComp { private onNodeClicked() { if (!this.initialized) return; + oops.audio.playEffect("music/button"); // 点击时弹出 HInfoComp,传入卡牌 UUID 和等级以启用预览模式 const config = CardPoolList.find(c => c.uuid === this.s_uuid || c.skill === this.s_uuid); const cardUuid = config ? config.uuid : this.s_uuid;