Skip to content

小结与练习

小结

本章覆盖了 Bevy UI 的交互层:

  • Interaction 枚举:最简单的交互方式,Button 标记 + Interaction::Pressed / Hovered / None,零插件;
  • bevy_ui_widgets:实验性 headless 控件库。ButtonActivate 事件,SliderValueChange<f32>CheckboxValueChange<bool>。控件不自动管理状态(或通过 *_self_update observer 启用自动管理),样式全靠你自己;
  • 滚动Overflow::scroll_y() + ScrollPosition,无需额外插件;
  • 焦点InputDispatchPlugin + TabNavigationPlugin 提供键盘导航和焦点管理;
  • UI 材质UiMaterial trait + MaterialNode 组件,用自定义 shader 绘制 UI 背景;
  • 工程模式:控件函数返回 impl Bundle,样式系统用 Changed 过滤器,数据流单向(事件 → 响应 → 更新)。

练习

  1. 按钮计数器:用 Interaction 路线做一个按钮,每次按下时计数器加一,文本显示当前计数。

  2. 滑条联动:两个滑条(X 和 Y),拖动任一滑条时在面板上显示当前坐标值。提示:用两个 SliderValue + 一个显示坐标的 Text

  3. 可滚动设置面板:把 Listing 29-7 的设置面板放进一个 Overflow::scroll_y() 容器里,添加足够多的选项让它需要滚动。再加一个 Scrollbar 控件。

  4. 禁用状态:给按钮添加 InteractionDisabled 组件(来自 bevy::ui),观察它如何影响交互。用按键 D 切换禁用/启用。

  5. 自定义滑条样式:给 Listing 29-3 的滑条添加悬停效果——鼠标悬停在滑块上时,滑块变亮。提示:查询 Hovered 组件。