Latest commit 7989cb2
检测组件的变化。
use bevy::prelude::*; use rand::Rng; fn main() { let mut app = App::new(); app.add_plugins(DefaultPlugins); app.add_startup_system(初始设置); app.add_system(修改组件); app.add_system(变化检测); app.add_system(变化追踪); app.run(); } #[derive(Component, Debug)] struct MyComponent(f32); fn 初始设置(mut commands: Commands) { commands.spawn(MyComponent(0.0)); commands.spawn(Transform::IDENTITY); } fn 修改组件(time: Res<Time>, mut query: Query<(Entity, &mut MyComponent)>) { for (entity, mut component) in &mut query { if rand::thread_rng().gen_bool(0.1) { info!("正在修改实体: {:?}", entity); component.0 = time.elapsed_seconds(); } } } // 这是查询过滤器,只有满足条件才能查询到实体 fn 变化检测(query: Query<(Entity, &MyComponent), Changed<MyComponent>>) { for (entity, component) in &query { info!("实体 {:?} 修改了组件: {:?}", entity, component); } } // 不设置过滤条件 fn 变化追踪( query: Query<( Entity, Option<&MyComponent>, Option<ChangeTrackers<MyComponent>>, )>, ) { for (entity, component, trackers) in &query { info!("{:?}: {:?}: -> {:?}", entity, component, trackers); } }