SuperAPI AI 工具集

bevy-genre-rhythm

编程与开发

查看项目

更新于 10-16 06:08

技能介绍

用途

Bevy Rhythm 是一个「类型路由器」(thin router),面向 Bevy 0.20 的节奏游戏开发。它本身不实现完整的节奏游戏,而是划定领域边界:谱面音符(chart notes)、歌曲时钟(song clock)与判定窗口(hit windows)由本技能负责,其余部分交给已链接的 Bevy 技能。当需要处理与音频对齐的谱面时间与判定窗口时加载本技能。

主要能力

  • 以 ECS 数据形式表达节奏游戏要素:组件(Component)保存每个实体的类型标记,资源(Resource)保存全局计数器(如分数、波次索引、随机种子)。
  • 提供谱面时钟(ChartClock)与判定器(judge)两个系统的注册示例。
  • 定义判定窗口资源(HitWindow),包含 perfect 与 good 两个阈值。
  • 提供谱面生成示例(spawn_chart),按索引与轨道生成 ChartNote。
  • 明确系统调度:游戏模式切换走 bevy-state-machines,本文件只注册谱面时钟与判定器。

使用方式

依赖声明为 bevy = "0.20"。核心数据结构包括:

  • ChartNote 组件:字段 hit_at: f32、lane: u8、judged: bool、grade: u8。
  • HitWindow 资源:字段 perfect: f32、good: f32。
  • ChartClock 资源:元组结构 ChartClock(f32),默认派生。

系统示例:

  • advance_chart:通过 time.delta_secs() 推进 ChartClock,注册在 Update。
  • judge:读取 ButtonInput<KeyCode>、ChartClock、HitWindow,查询 ChartNote;当按下 KeyCode::KeyF 时,对未判定且 lane == 0 的音符计算 (clock.0 - note.hit_at).abs(),若在 perfect 窗口内则 grade = 2,若在 good 窗口内则 grade = 1。
  • spawn_chart:在 Startup 中按 [0u8, 1, 0, 2] 生成音符,hit_at 为 1.0 + index * 0.5。

插件注册:ClockPlugin 初始化 ChartClock 并添加 advance_chart;JudgePlugin 插入 HitWindow { perfect: 0.04, good: 0.09 } 并添加 judge;ChartPlugin 在 Startup 添加 spawn_chart。

适用场景

  • 在 Bevy 0.20 中搭建节奏游戏,需要确定谱面时间与判定逻辑的数据归属。
  • 需要将音乐播放、输入映射、分数呈现与核心判定逻辑解耦的项目。
  • 需要参考 ECS 所有权与调度规则(组件、资源、Query、Commands、Startup、Update、FixedMain、.chain()、Plugin)的节奏游戏实现。

限制

  • 本技能是路由器,不拥有第二套实现;播放、输入设备与分数呈现留在链接的技能中。
  • 不在此处发明物理、导航、网络或 XR crate;只使用有文档的 Bevy crate 与模块。
  • 不在此处选择物理或网络 crate。
  • 不得将宽窗口内的每次按键都视为 perfect:紧窗口写 grade 2,宽窗口写 grade 1。
  • 不得从两个无序系统可变查询同一组件;调度默认并行,除非用 .chain() 排序。
  • 文档 URL 不固定 /0.20.0/,官方页面保持在无版本站点上。
  • 消息与观察者属于 bevy-events-messaging 的所有权槽位,本文件不发明新事件类型。

相关技能

前置:bevy-master(ECS 所有权与调度)、bevy-ecs-composition(生成与查询形态)。 互补:bevy-audio-systems(音乐播放)、bevy-input-handling(按键命中)、bevy-game-loop-time-trial(分数时间)。 下游/消费者:无。