const { ccclass } = cc._decorator; type LosePanelAction = (event?: cc.Event, customEventData?: string) => void; interface LosePanelActions { [name: string]: LosePanelAction; } /** Lose prefab 的按钮桥接层;失败流程仍由 Map 和 SceneManager 管理。 */ @ccclass export default class LosePanel extends cc.Component { private actions: LosePanelActions = null; bind(actions: LosePanelActions) { this.actions = actions || {}; } shareFriend(event?: cc.Event, customEventData?: string) { this.invoke("shareFriend", event, customEventData); } shareFriend2(event?: cc.Event, customEventData?: string) { this.invoke("shareFriend2", event, customEventData); } shareClose(event?: cc.Event, customEventData?: string) { this.invoke("shareClose", event, customEventData); } homeBtn(event?: cc.Event, customEventData?: string) { this.invoke("homeBtn", event, customEventData); } reviewLevel(event?: cc.Event, customEventData?: string) { this.invoke("reviewLevel", event, customEventData); } closeWinStreak(event?: cc.Event, customEventData?: string) { this.invoke("closeWinStreak", event, customEventData); } openHealth(event?: cc.Event, customEventData?: string) { this.invoke("openHealth", event, customEventData); } returnHome(event?: cc.Event, customEventData?: string) { this.invoke("returnHome", event, customEventData); } againLevel(event?: cc.Event, customEventData?: string) { this.invoke("againLevel", event, customEventData); } private invoke(name: string, event?: cc.Event, customEventData?: string) { const action = this.actions && this.actions[name]; if (action) { action(event, customEventData); return; } cc.warn("LosePanel action is not bound:", name); } onDestroy() { this.actions = null; } }