Farbrausch 演示场景工具源码合集(fr_public)
Farbrausch 2001—2011 年 demo 工具源码合集,使用 C++,涉及 demoscene 与 D...
bonsai · Sollimann/bonsai
Bonsai(crate 名 bonsai-bt)是 Rust 编写的行为树库,面向确定性 AI,可用于游戏开发与自主机器人等方向,并提供 Python 绑定。仓库最低支持 Rust 1.72,crate 已发布至 crates.io 与 PyPI,文档见 docs.rs;主题标签涵盖 Bevy、Piston...
Bonsai(crate 名为 bonsai-bt)是一个用 Rust 编写的行为树(Behavior Tree)实现,仓库标题直接写明其定位:为确定性 AI 提供行为树基础能力,并且“now with Python bindings”,即已经提供 Python 语言绑定。行为树最初流行于游戏编程,用于描述 NPC、敌人或单位在不同情境下如何选择并执行行为;由于它模块化、可组合、对状态变化反应灵敏,如今也被广泛用于 AI 与机器人等领域。
从仓库标签可以看到项目关注的方向相当广泛,包括 behavior-tree、deterministic、concurrency、finite-state-machine、navigation、bevy、piston、ros、ros2、unreal-engine 等。这些标签反映了作者对游戏引擎接入、机器人中间件以及状态机/导航等场景的兴趣;具体到每个引擎或框架的集成方式与可用程度,需要以代码与示例为准,尚未在 README 中逐一展开。项目采用 MIT 许可证,仓库徽章显示其仍在持续维护,并配有 CI、codecov 覆盖率与文档构建。
README 将使用方式分为 Rust 与 Python 两条路径,二者发布渠道不同:
Cargo.toml 中加入依赖,例如 bonsai-bt = "*"。实际工程中通常会把版本号收敛为具体版本,以避免上游变动带来的不确定性。bonsai-bt 之名发布在 PyPI 上,执行 pip install bonsai-bt 即可安装;Python 侧的示例放在仓库的 bonsai-py/ 目录中。环境方面,README 的徽章标明最低支持 Rust 1.72(对应 Rust 的最小支持版本策略 RFC 2495),低于该版本的工具链不在支持范围内。API 文档托管在 docs.rs 的 bonsai-bt 页面,仓库内另有 docs/concepts/README.md 讲解概念、examples/README.md 汇总示例、DEVELOPMENT.md 作为开发指南,以及一块公开的 Kanban 看板用于跟踪任务。README 顶部还提供了行为树的快速入门视频链接,适合在动手前建立直观印象。
README 给出的定义很朴素:行为树是一种数据结构,用来规定某些“行为”可以如何发生,以及它们执行的先后顺序。它的价值在于让复杂系统同时保持模块化与反应式——前者让行为可以被拆分成小块并自由组合、复用,后者让系统能根据条件变化及时切换策略,而不是把逻辑写成一团难以维护的分支判断。
在执行语义上,行为树是一棵由节点构成的树,每个节点代表一个过程(process)。过程结束时会上报 Success 或 Failure,父节点据此决定接下来选择哪个子过程;如果过程尚未结束,则上报 Running,表示“还在进行中”。正是这三种信号构成了整棵树调度的基础,父节点无须了解子节点的内部实现,只需根据返回结果做选择。
README 用一组简洁的伪代码说明了常见控制节点的语义,这些也是理解该库 API 的入口:
Sequence([A, B]):A 成功后再执行 B,即顺序执行。Select([A, B]):优先尝试 A,若 A 失败再尝试 B,即选择/回退。If(condition, A, B):条件成功则执行 A,否则执行 B。Invert(A):对 A 的结果取反,成功变失败、失败变成功。AlwaysSucceed(A):无论子节点结果如何,都强制返回成功。Timeout(seconds, A):运行 A,但若其 Running 状态超过时限则判为失败。While(LoopCondition, [A, B]):在 A、B 之间检查循环条件,条件成立则重复执行。While(WaitForever, [A, B]):以“永远等待”为条件,等价于无限循环。WhileAll(LoopCondition, [A, B]):等 A、B 全部成功完成后,才检查条件节点。WhenAll([A, B]):并行运行 A、B,等待两者都成功。WhenAny([A, B]):并行运行,等待任意一个成功。Race([A, B]):并行运行,任意一个结束即返回,不论成功还是失败。After([A, B]):并行运行,但要求 A 先于 B 成功。README 提示可以查阅 Behavior 枚举以获得更完整的信息——也就是说,上述只是常用集合,实际可用的节点类型以源码中的枚举定义为准。
行为树要始终保持“响应”,关键在于树遍历本身不能被阻塞:树中创建的动作应当尽可能瞬时完成,否则一次耗时调用就会拖住整棵树的推进,让其他分支失去及时响应的机会。
对于确实需要数秒甚至数分钟才能完成的任务或函数——无论 async 还是同步实现——README 建议把这些作业派发到后台线程执行,再通过 channel 获取任务状态。这样行为树一侧只负责轮询或接收状态,从而维持轻量的遍历节奏。仓库 examples 目录中的 async drone 示例演示了这一思路,可作为把长任务与行为树解耦的参考实现。
若要上手,README 指向的入口依次是:examples/README.md 中的示例集合、docs/concepts/README.md 中的概念讲解、bonsai-py/ 中的 Python 用法,以及 DEVELOPMENT.md 中的开发说明。README 末尾还有 “Honorable Mentions / similar crates” 一类的相邻项目推荐,便于对比不同实现的设计取舍。
需要提醒的是,README 主要给出语义层面的说明与最小安装指引,并未在同一页内覆盖全部 API、性能特征或各引擎集成的细节;涉及确定性保证的具体机制、并发模型与 ROS/ROS2、Bevy、Piston 等方向的可用性,建议以 docs.rs 文档、源码与示例为准逐项核验。
Farbrausch 2001—2011 年 demo 工具源码合集,使用 C++,涉及 demoscene 与 D...
该仓库为 Java 语言项目,名称 BuildGDX 由「Build」与「GDX」组合,推测与 B...
id Software 以 GPL 发布的《Doom 3 BFG Edition》C++ 源代码。发布包不含游...