-1

考虑一个代表玩家struct TilePos(i32, i32);并生成为的简单组件commands.spawn((TilePos(0, 0), ));

对键盘输入做出反应的正确方法是什么,例如箭头键,并且TilePos每当按下一个键时就改变一个?

4

1 回答 1

2

您可能想查看食谱以获取更多示例。

如果只有一个玩家,那么你应该把它变成一个资源,这样你就可以做到: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>>.

此代码改编自此处

于 2020-12-28T12:06:07.977 回答