SuperAPI AI 工具集

bevy-genre-platformer

编程与开发

查看项目

更新于 10-16 06:08

技能介绍

用途

这是一个 Bevy 0.20 平台跳跃游戏(platformer)的“薄路由”(thin router)技能。它不亲自实现平台跳跃的领域逻辑,而是负责把平台跳跃相关的任务路由到对应的 Bevy 子技能:移动、相机与瓦片。当你要为一个平台跳跃游戏安排移动、相机和瓦片处理时,加载本技能进行路由。

主要能力与 ECS 结构约定

  • 组件(Component)保存该类型的每实体标记,作为普通数据。本文件不命名新的引擎类型。
  • 资源(Resource)保存整局运行的计数器(分数、波次索引、随机种子),通过 bevy-data-resources 管理。
  • 系统在 Update 或来自 bevy-master 的固定时间步上读取这些组件;当后续系统必须看到前一个系统的结果时,用 .chain() 排序。
  • 调度:玩法模式切换走 bevy-state-machines。不要臆造一个类型插件(genre plugin)。

路由

  • bevy-character-movement —— 移动(Locomotion)。
  • bevy-camera-systems —— 跟随相机。
  • bevy-tilemap —— 地面瓦片。
  • bevy-2d-animation —— 精灵动画片段。

使用方式(示例要点)

依赖声明为 bevy = "0.20"。

土狼时间(coyote time)与跳跃缓冲(jump buffer)放在 Mover 上。重力与跳跃在同一个系统中写入速度,因此它们不会发生竞态。示例中 Mover 组件包含 velocity、grounded、coyote、jump_buffer 字段;arm_jump 在按下空格时把 jump_buffer 设为 0.15;feel 在 FixedUpdate 上按 dt 递减 coyote 与 jump_buffer,当两者都大于 0 时把 velocity.y 设为 420.0 并重置状态,未着地时按上升/下降分别施加重力(下降 2200.0,上升 1400.0)。安装方式为 app.add_systems(Update, arm_jump).add_systems(FixedUpdate, feel)。

注意:arm_jump 与 feel 都写 Mover,且位于不同调度。如果出现借用冲突,把 arm_jump 移到 FixedUpdate 并在 feel 之前 .chain()。

集成(integration)读取 Mover 并写 Transform,需在 feel 之后串联。示例中 integrate 按 dt 把 velocity 累加到 translation。

单向平台(one-way ledge)是一个带顶部高度的组件。移动体只在下降时吸附。示例中 OneWay 组件含 half_width 与 top;land 系统在 velocity.y > 0 时跳过,否则检查水平距离是否在 half_width 内、脚部与顶部高度差是否小于 6.0,满足则置 grounded 并把 velocity.y 归零。

相机复制玩家的平移并保留自己的 z。示例中 follow 系统读取带 Player 的 Transform,写入带 Camera2d 且不带 Player 的 Transform,只复制 x、y。

适用场景

适用于在 Bevy 0.20+ 上构建平台跳跃游戏时,需要把移动、相机、瓦片、精灵动画等任务分派到对应子技能,并遵循惯用 ECS 写法的场景。

限制与注意事项

  • 瓦片碰撞与精灵动画片段路由到 bevy-tilemap 与 bevy-2d-animation。
  • land 与 feel 都写 Mover,当两者都安装时需在 FixedUpdate 上串联。
  • 目标版本:Bevy 0.20+。核心 ECS 类型包括 Component、Resource、Query、Commands、Startup、Update、Fixed / FixedMain(bevy::time)、.chain()、Plugin、DefaultPlugins、MinimalPlugins。消息与观察者属于所有权槽位,其 API 见 bevy-events-messaging。除非用 .chain() 排序冲突的系统,否则系统并行运行。
  • 借用规则:两个都可变查询同一组件的系统必须排序(.chain())或拆分,使只有一个写入;无关系统保持并行。
  • 明确禁止:不要在文档 URL 中固定 /0.20.0/;不要从两个无序系统可变查询同一组件;不要在此臆造物理、导航、网络或 XR crate;不要在 Update 上施加重力而让土狼时间与跳跃缓冲在 FixedUpdate 上计时;不要在两个调度上分别由 arm_jump 与 feel 写 Mover;不要臆造类型 API;不要在此选择物理或网络 crate。
  • 参考:bevy-master 的库固定为 0.20.0,官方页面保持在无版本号的最新分支。官方文档涵盖 Assets、Examples、ECS、Plugins。
  • 相关技能:前置为 bevy-master(ECS 所有权与调度)、bevy-ecs-composition(生成与查询形态);互补为 godot-genre-platformer(Godot 引擎上的平台跳跃,同等深度)、bevy-character-movement、bevy-camera-systems、bevy-tilemap、bevy-2d-animation。下游/消费者:无,此路由不拥有第二套实现。主路由为 bevy-master。