Latest commit e6bce74
use bevy::ecs::system::SystemParam; use bevy::prelude::*; /// 说明如何使用[`SystemParam`]创建自定义系统参数 /// 本例创建了一个`[SystemParam]`结构,用来计算玩家数量 fn main() { App::new() .insert_resource(PlayerCount(0)) .add_startup_system(生成玩家) .add_system(计算玩家数量) .run(); } #[derive(Component)] struct Player; #[derive(Component)] struct PlayerCount(usize); /// [`SystemParam`]结构可以包含任何类型,这些类型也可以包含在一个系统函数签名中 /// 在这个例子中,SystemParam包括一个查询和一个可变的资源 #[derive(SystemParam)] struct PlayerCounter<'w, 's> { players: Query<'w, 's, &'static Player>, count: ResMut<'w, PlayerCount>, } impl<'w, 's> PlayerCounter<'w, 's> { fn count(&mut self) { self.count.0 = self.players.iter().len(); } } /// 生成3个player fn 生成玩家(mut commands: Commands) { commands.spawn().insert(Player); commands.spawn().insert(Player); commands.spawn().insert(Player); } /// [`SystemParam`]可以直接在系统参数中使用 fn 计算玩家数量(mut counter: PlayerCounter) { counter.count(); println!("{}个玩家在游戏中", counter.count.0); }