考虑一个代表玩家struct TilePos(i32, i32);
并生成为的简单组件commands.spawn((TilePos(0, 0), ));
。
对键盘输入做出反应的正确方法是什么,例如箭头键,并且TilePos
每当按下一个键时就改变一个?
您可能想查看食谱以获取更多示例。
如果只有一个玩家,那么你应该把它变成一个资源,这样你就可以做到:ResMut<TilePos>
在函数定义中。
否则你可以这样做:
#[derive(Default)]
struct State {
event_reader: EventReader<KeyboardInput>,
}
/// This system prints out all keyboard events as they come in
fn print_keyboard_event_system(
mut state: Local<State>,
keyboard_input_events: Res<Events<KeyboardInput>>,
mut query: Query<&mut TilePos>
) {
for event in state.event_reader.iter(&keyboard_input_events) {
if event.state == bevy::input::ElementState::Pressed && event.key_code == Some(bevy::input::keyboard::KeyCode::Up){
for mut t in &mut query.iter_mut() {
t.1 += 1;
println!("New Tile: {} {}", t.0, t.1);
println!("{:?}", event);
}
}
}
}
如果您想编辑特定的图块,则可以使用另一个组件 ( .with()
) 生成它,并query
使用Query<TilePos, With<Specific>>
.
此代码改编自此处。