35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
const handledEvents = new WeakSet<cc.Event>();
|
|
|
|
/** 返回是否由首页统一处理;旧入口在其他场景仍可保留原有行为。 */
|
|
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;
|
|
}
|
|
}
|