Entrada & Eventos
Lide com eventos de teclado, mouse, gamepad e do jogo no Bevy - controles responsivos sem sistemas emaranhados.
Busque em todas as páginas da documentação
Lide com eventos de teclado, mouse, gamepad e do jogo no Bevy - controles responsivos sem sistemas emaranhados.
fn jump(
keys: Res<ButtonInput<KeyCode>>,
mut q: Query<&mut PlayerState>,
) {
if keys.just_pressed(KeyCode::Space) {
for mut state in &mut q {
state.request_jump = true;
}
}
}Quando usar isso:
use bevy::prelude::*;
#[derive(Event)]
struct PlayerShot {
entity: Entity,
}
#[derive(Component)]
struct Cooldown(Timer);
fn shooting(
mouse: Res<ButtonInput<MouseButton>>,
mut commands: Commands,
mut reader_q: Query<(Entity, &mut Cooldown)>,
mut events: EventWriter<PlayerShot>,
time: Res<Time>,
) {
if !mouse.just_pressed(MouseButton::Left) {
return;
}
for (entity, mut cd) in &mut reader_q {
cd.0.tick(time.delta());
if cd.0.finished() {
events.write(PlayerShot { entity });
cd.0.reset();
}
}
}
fn on_shot(mut events: EventReader<PlayerShot>) {
for e in events.read() {
println!("shot from {:?}", e.entity);
}
}O que isso demonstra:
just_pressed para disparo único por cliqueEventReader separado do escritor do sistemaUpdate.leafwing-input-manager da comunidade ou um personalizado) vinculam teclas a intenções.| Recurso | Uso |
|---|---|
ButtonInput<KeyCode> | Teclado |
ButtonInput<MouseButton> | Botões do mouse |
Axis<GamepadAxis> | Joysticks (via entidades de gamepad) |
pressed para ações que precisam ser únicas - a repetição automática parece errada. Correção: just_pressed para ações discretas.time.delta_secs()..after(shooting) no leitor.Gamepad na inserção e mapear por dispositivo.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Apenas polling | Jam simples | Muitas ações reconfiguráveis |
| Canal de thread do SO | Controladores personalizados | Entrada Bevy suficiente |
| Sincronização de entrada em rede | Multiplayer online | Single-player local |
| Botões apenas de UI | Jogo com muitos menus | Gameplay de reação rápida |
Armazene HashMap<Action, KeyCode> em um recurso; mapeie no sistema de entrada a cada frame.
Recurso AccumulatedMouseMotion (Bevy 0.14+) para mira de câmera FPS.
O suporte móvel do Bevy está evoluindo - mapeie toques para componentes de joystick virtuais.
Componente Interaction em nós de UI; pule a entrada do mundo quando Hovered em um menu.
Grave as bordas just_pressed com números de frame; a reprodução grava um recurso de entrada sintético.
Enum State desabilita sistemas de gameplay com run_if(in_state(Playing)).
Vários instâncias de EventReader recebem todos os eventos, a menos que usem grupos de ordenação de leitores.
Máquina de estados de ação de nível superior sobre botões brutos - bom para controles complexos.
Entrada lida em Update; resposta de física frequentemente em FixedUpdate - veja Loops de Jogo e Tempo.
Exemplo de movimento de teclado em Básicos de Desenvolvimento de Jogos.
Versões da Pilha: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026