Latest commit 73605f4
创建、激活并接收事件。
//! 创建了一个新事件 //! 每秒触发一次事件,收到事件时打印消息 use bevy::prelude::*; fn main() { let mut app = App::new(); app.add_plugins(DefaultPlugins); app.add_event::<MyEvent>(); app.add_event::<PlaySound>(); app.init_resource::<EventTriggerState>(); app.add_system(事件触发器); app.add_system(事件侦听器); app.add_system(音响); app.run(); } struct MyEvent { pub message: String, } #[derive(Default)] struct PlaySound; #[derive(Resource)] struct EventTriggerState { event_timer: Timer, } impl Default for EventTriggerState { fn default() -> Self { EventTriggerState { event_timer: Timer::from_seconds(1.0, TimerMode::Repeating), } } } // 每秒发送一次 MyEvent 和 PlaySound fn 事件触发器( time: Res<Time>, mut event_trigger_state: ResMut<EventTriggerState>, mut my_event: EventWriter<MyEvent>, mut play_sound: EventWriter<PlaySound>, ) { // 计时器开始计时 let delta = time.delta(); event_trigger_state.event_timer.tick(delta); // 计时结束后发送事件 if event_trigger_state.event_timer.finished() { my_event.send(MyEvent { message: "MyEvent just happened!".to_string(), }); play_sound.send_default(); } } // 接收到事件时打印消息 fn 事件侦听器(mut events: EventReader<MyEvent>) { for my_event in events.iter() { info!("{}", my_event.message); } } fn 音响(mut events: EventReader<PlaySound>) { for _ in events.iter() { info!("正在播放声音"); } }