SuperAPI AI 工具集

bevy-genre-idle-clicker

编程与开发

查看项目

更新于 10-16 06:08

技能介绍

用途

本技能是一个 Bevy 0.20 放置点击类(idle clicker)游戏的“类型路由”。它本身不承担具体领域实现,而是把放置点击玩法所需的各项工作分派给对应的 Bevy 技能,例如货币、点击目标、点击输入、离线进度等。适合用于“应用运行期间持续增长的货币”这类场景。

主要能力与 ECS 结构约定

  • 组件(Component)以纯数据形式保存该类型每个实体的标志,本文件不引入新的引擎类型。
  • 资源(Resource)保存全局计数器(分数、波次索引、随机种子等),通过 bevy-data-resources 管理。
  • 系统在 Update 或来自 bevy-master 的固定时间步上读取这些组件;当后续系统需要看到前一个系统的结果时,用 .chain() 排序。
  • 玩法模式切换通过 bevy-state-machines 处理,不自行发明类型插件。

路由

  • bevy-economy-system:货币。
  • bevy-ui-layout:点击目标。
  • bevy-input-handling:点击。
  • bevy-save-load:离线进度。

使用方式(示例要点)

依赖声明为 bevy = "0.20" 与 serde(features 含 derive)。

钱包是一个资源,包含 coins 与 per_second 字段。生成器在 Update 中依据 Time::delta_secs 增加金币。示例中 tick_income 按 per_second 累加金币,click 在鼠标左键按下时加 1.0 金币,install_income 插入 Wallet 资源并把 (tick_income, click) 以 .chain() 加入 Update。

每个建筑是一个实体,Generator 组件含 rate 与 owned。generators_to_wallet 遍历所有生成器,累加 rate * owned 得到总速率,写入 wallet.per_second 并按时间增量增加金币。资料强调:tick_income 与 generators_to_wallet 都会写 Wallet,只能运行其中一个,或用 .chain() 排序。

离线进度保存一个 unix 秒时间戳,下次插入资源时结算经过的时间。IdleClock 资源含 last_unix、per_second、banked。bank_offline 计算经过秒数并封顶(示例为 8 小时),累加到 banked 并更新 last_unix;claim 把 banked 加入钱包并清零。bank_offline 与 claim 都会修改 IdleClock,因此需要 .chain()。该结构的持久化属于 bevy-save-load。

适用场景

需要货币在应用运行期间持续增长、包含点击加币与自动产出、并需要离线收益结算的 Bevy 放置点击类游戏。

限制与注意事项

  • 离线时间必须在资源中封顶(示例封顶 8 小时),防止时钟异常导致无限铸币。
  • 不得从两个无序系统对同一组件做可变查询;调度默认并行运行系统,除非用 .chain() 排序。
  • 不得让 tick_income 与 generators_to_wallet 同时累加 Wallet.coins,除非已 .chain() 或只安装其中一个。
  • 不在此处发明物理、导航、网络或 XR 相关 crate;只使用有文档的 Bevy crate 与模块。
  • 不发明类型 API,Bevy 代码保持惯用 ECS 风格。
  • 文档 URL 不固定 /0.20.0/,官方页面保持在无版本的最新分支;库版本锁定在 bevy-master 的 0.20.0。

相关技能

前置:bevy-master(ECS 所有权与调度)、bevy-ecs-composition(生成与查询形态)。互补:godot-genre-idle-clicker(Godot 引擎上的同类放置点击)、bevy-economy-system、bevy-ui-layout、bevy-input-handling、bevy-save-load。下游消费者:无,该路由不拥有第二套实现。