# Toast事件机制修改说明 ## 修改概述 本次修改将Toast提示系统从直接节点操作改为事件驱动机制,提高了代码的解耦性和可维护性。 ## 主要修改内容 ### 1. EventBus事件扩展 在 `assets/scripts/Core/EventBus.ts` 中添加了新的Toast事件: ```typescript // Toast提示事件 SHOW_TOAST = 'SHOW_TOAST', HIDE_TOAST = 'HIDE_TOAST' ``` ### 2. ToastAni动画组件 创建了 `assets/scripts/Animations/ToastAni.ts` 文件,实现了Toast的滑动动画效果: - **滑入动画**:从屏幕左边中间位置滑入到屏幕中央 - **滑出动画**:从屏幕中央滑出到屏幕右边外侧 - **位置重置**:动画完成后自动重置到初始位置 - **事件监听**:监听 `SHOW_TOAST` 和 `HIDE_TOAST` 事件 ### 3. GameBlockSelection.ts 修改 - 移除了 `toastNode` 属性的直接引用 - 修改 `showInsufficientCoinsUI()` 方法使用事件机制 - 修改 `showNoPlacedBlocksToast()` 方法使用事件机制 ### 4. EnemyController.ts 修改 - 移除了 `toastPrefab` 属性 - 修改 `showStartWavePromptUI()` 方法使用事件机制 - 简化了波次提示的显示逻辑 ## 使用方法 ### 显示Toast提示 ```typescript // 显示Toast消息 EventBus.getInstance().emit(GameEvents.SHOW_TOAST, { message: '这是提示消息', duration: 3.0 // 可选,默认3秒 }); ``` ### 手动隐藏Toast ```typescript // 手动隐藏Toast EventBus.getInstance().emit(GameEvents.HIDE_TOAST); ``` ## 动画特性 1. **固定位置**:Toast始终从屏幕左边中间位置进入,从右边中间滑出 2. **不受Camera影响**:动画位置基于Canvas坐标系,不受Camera移动影响 3. **自动管理**:节点默认为active状态,无需手动激活/隐藏 4. **防重复**:动画进行中时会忽略新的显示请求 5. **自动重置**:动画完成后自动重置到初始位置 ## 配置要求 1. Canvas/Toast节点需要添加 `ToastAni` 组件 2. Toast节点的子节点 `label` 需要有 `cc.Label` 组件 3. 确保EventBus正常工作 ## 优势 1. **解耦合**:各模块不再需要直接引用Toast节点 2. **统一管理**:所有Toast显示通过事件系统统一管理 3. **易扩展**:可以轻松添加新的Toast类型和样式 4. **更好的动画**:提供了流畅的滑入滑出动画效果 5. **减少依赖**:移除了对预制体的直接依赖 ## 注意事项 1. 需要确保Canvas/Toast节点存在并正确配置ToastAni组件 2. 事件参数中的message为必需参数,duration为可选参数 3. 动画期间会忽略新的显示请求,避免动画冲突