bevy 的 add_system 函数作为参数 // impl IntoSystemAppConfig<M>
system 支持各种方法 // impl_system_collection 宏
system 的参数支持自由组合 // impl_system_function 宏
system 的 Query 参数支持自由组合 // impl_anytuple_fetch 宏
app.run() 会替换 app 为 空(原因未知),不执行 run 就可以一直用 update 手动调度更新
Reflect 组件让 world 能被序列化成 scene,例子
Bevy 例子:https://dev.to/sbelzile/rust-platformer-part-1-bevy-and-ecs-2pci
非官方书 https://bevy-cheatbook.github.io
ECS 是扁平数据结构,但可以逻辑分层 Parent and Children,移除实体时需要双向删除
Bevy 的默认清理策略是每帧清除事件,但使用双缓冲,以便前一帧更新的事件保持可用
Bundle 是创建实体的一种便利,不能直接查询
全局访问的数据适合创建成资源,只在 ECS 模式中访问时创建成组件
系统参数类型:
- Res/ResMut 访问资源,可使用 Option
- Query 访问实体,可使用 Option、Or<(…)>,With/Without,不需要访问数据时放在第二个参数中
- Added<T> Changed<T> 过滤变化,ChangeTrackers 主动检测,由 DerefMut 实现
- 特殊的移除检测:RemovedComponents<T> ,Option
- Commands 管理资源和实体、组件,EventWriter/EventReader 发送和接收事件
- Local<T> 绑定到系统的资源,必须实现 Default 或者 FromWorld 用于自动初始化
- ParamSet 查询多个
系统能并发运行,.after/.before 指定系统运行顺序
app.add_state 状态能指定系统,系统中能以资源 State<T> 访问,切换 state 后需要 input.rest,能指定为系统运行条件
【0.10 没有了, 用 SystemSet 替代】 Stage 是硬同步点,同一个 Stage 上的系统并发运行完才会进入下一个 Stage,内置 Stage:
- PreStartup, Startup, PostStartup
- First, PreUpdate, Update, PostUpdate, Last
- Extract, Prepare, Queue, PhaseSort, Render, Cleanup
FixedTimestep::step(1.0) 指定固定刷新周期
play() 播放音频
interaction 组件判断按钮状态
动画?