const handledEvents = new WeakSet(); /** 返回是否由首页统一处理;旧入口在其他场景仍可保留原有行为。 */ export function vibrateHomeButton(event?: cc.Event): boolean { if (!event) return false; const scene = cc.director.getScene(); if (!scene || scene.name !== "HomeScene") return false; if (handledEvents.has(event)) return true; handledEvents.add(event); try { cc.fx.GameTool.setVibrate("light", 1); } catch (error) { console.warn("HomeScene 按钮轻振动调用失败:", error); } return true; } /** 根节点捕获触摸,自动覆盖后来挂入首页的 Bundle 按钮。 */ export function onHomeButtonTouchEnd(event: cc.Event.EventTouch): void { // 引擎可能复用事件对象,每次派发重新去重。 handledEvents.delete(event); let target = event.target as cc.Node; while (target) { const button = target.getComponent(cc.Button); if (button) { if (button.interactable && button.enabledInHierarchy && (button as any)._pressed) { vibrateHomeButton(event); } return; } if (target === event.currentTarget) return; target = target.parent; } }