用途
本技能是一个面向 Bevy 引擎的益智类(Puzzle)玩法路由器。它不承担具体领域实现,领域工作交给下方列出的 Bevy 技能完成。适用场景为:需要自行维护网格规则与撤销栈时加载本技能。
主要能力与 ECS 结构
- 组件(Component)以普通数据形式保存该品类的每实体标记,本文件不命名新的引擎类型。
- 资源(Resource)通过 bevy-data-resources 保存整局计数器(分数、波次索引、随机种子)。
- 系统在 Update 或 bevy-master 提供的固定时间步上读取这些组件;当后一个系统需要看到前一个结果时,用
.chain()排序。 - 调度:玩法模式切换通过 bevy-state-machines 处理。网格瓦片与撤销栈为组件加一个资源。
使用方式(示例要点)
依赖项为 bevy = "0.20"。示例中每个瓦片存储网格坐标与是否为目标(goal);撤销栈是保存先前坐标的资源。流程为读取输入、压入历史、再滑动。这些系统共享 Tile,因此需要串联。
组件与资源定义包括:GridPos { x: i32, y: i32 }、Tile { pos, goal }、PlayerToken、UndoStack { steps: Vec<GridPos> }。
系统包括:boot(插入撤销栈资源、生成玩家令牌与目标瓦片)、read_move(读取方向键返回位移)、push_undo(按 Z 键时跳过;否则在玩家移动前压入当前坐标)、slide_player(按 Z 键时跳过;否则按位移更新坐标)、undo_move(按 Z 键时弹出上一步并恢复坐标)。install 中通过 add_systems(Startup, boot) 与 add_systems(Update, (undo_move, push_undo, slide_player).chain()) 注册。
通关判定:当玩家令牌与目标瓦片处于同一格时解出谜题。solved 函数查询玩家瓦片并检查是否存在 goal 为真且坐标相等的瓦片。
注意:push_undo 与 slide_player 都会调用 read_move,同一帧内读取两次 ButtonInput;just_pressed 在该帧保持为真,因此两者看到同一个按键。
场景结构映射
- 品类内容:实体加上下方链接的领域技能。
- 整局导演:一个 Resource。
- 循环通知:bevy-events-messaging。
路由
- bevy-state-machines — 通关状态。
- bevy-input-handling — 移动。
- bevy-data-resources — 规则表。
- bevy-ui-layout — 提示。
范围与限制
瓦片存储 GridPos,UndoStack 保存先前的玩家坐标。Bevy 没有益智网格类型;上述示例即为数据本身。
目标为 Bevy 0.20+。核心 ECS 类型:Component、Resource、Query、Commands、Startup、Update、Fixed / FixedMain(bevy::time)、.chain()、Plugin、DefaultPlugins、MinimalPlugins。消息与观察者属于所有权槽位,其 API 参见 bevy-events-messaging。除非 .chain() 对冲突系统排序,系统并行运行。
状态所有权:单个实体上的数据由 Component 持有;整个应用单值由 Resource 持有;生成由 Commands 负责;不得竞速的顺序由 .chain() 在相同调度中约束;Plugin 边界负责在应用运行前注册系统与资源。借用规则:两个都可变查询同一组件的系统必须排序(.chain())或拆分,使只有一个写入;无关系统保持并行。
决策表:每实体数据用 Component + Query,不用单个脚本持有整棵树;应用级配置或时钟用 Resource,不要复制到每个实体;稳定模拟步用 FixedMain 与 Fixed 时钟,不要绑定到原始帧 Update;启动生成用 Startup 中的 Commands,不要从渲染系统生成;跨系统通知而非共享状态用消息或观察者槽位,不要在本文件中自造事件类型;文档集之外的 API 先查官方文档,不要使用杜撰的 crate 或 API。
禁止事项
- 不要在文档 URL 中固定
/0.20.0/。原因:链接应保持指向最新;0.20 目标在正文中说明一次。 - 不要从两个无序系统可变查询同一组件。原因:除非
.chain()排序,调度会并行运行系统。 - 不要在此杜撰物理、导航、网络或 XR crate。原因:本技能只命名有文档的 Bevy crate 与模块。
- Bevy 代码中不得出现外部引擎类型。原因:Bevy 代码保持地道 ECS,仅使用有文档的 Bevy API。
- 不得杜撰品类 API。原因同上。
- 不要在此选择物理或网络 crate。原因同上。
参考
官方页面保持无版本永久链接。bevy-master 上的库固定为 0.20。官方文档涵盖 Assets(官方资源目录,未选定第三方 crate)、Examples(最新分支示例树)、ECS(Component、systems、Query、Startup、Update、.chain())、Plugins(Plugin、DefaultPlugins、MinimalPlugins、add_plugins)。
相关技能
前置:bevy-master(ECS 所有权与调度)、bevy-ecs-composition(生成与查询结构)。 补充:godot-genre-puzzle(同品类的对等技能)、bevy-state-machines(通关状态)、bevy-input-handling(移动)、bevy-data-resources(规则表)、bevy-ui-layout(提示)。 下游消费者:无,本路由器不拥有第二实现。 主技能:bevy-master(Bevy 路由器)。