Toast事件机制修改说明.md 2.6 KB

Toast事件机制修改说明

修改概述

本次修改将Toast提示系统从直接节点操作改为事件驱动机制,提高了代码的解耦性和可维护性。

主要修改内容

1. EventBus事件扩展

assets/scripts/Core/EventBus.ts 中添加了新的Toast事件:

// Toast提示事件
SHOW_TOAST = 'SHOW_TOAST',
HIDE_TOAST = 'HIDE_TOAST'

2. ToastAni动画组件

创建了 assets/scripts/Animations/ToastAni.ts 文件,实现了Toast的滑动动画效果:

  • 滑入动画:从屏幕左边中间位置滑入到屏幕中央
  • 滑出动画:从屏幕中央滑出到屏幕右边外侧
  • 位置重置:动画完成后自动重置到初始位置
  • 事件监听:监听 SHOW_TOASTHIDE_TOAST 事件

3. GameBlockSelection.ts 修改

  • 移除了 toastNode 属性的直接引用
  • 修改 showInsufficientCoinsUI() 方法使用事件机制
  • 修改 showNoPlacedBlocksToast() 方法使用事件机制

4. EnemyController.ts 修改

  • 移除了 toastPrefab 属性
  • 修改 showStartWavePromptUI() 方法使用事件机制
  • 简化了波次提示的显示逻辑

使用方法

显示Toast提示

// 显示Toast消息
EventBus.getInstance().emit(GameEvents.SHOW_TOAST, {
    message: '这是提示消息',
    duration: 3.0  // 可选,默认3秒
});

手动隐藏Toast

// 手动隐藏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. 动画期间会忽略新的显示请求,避免动画冲突