我目前在Rust应用程序中使用sdl2(0.35.2)来检测关键事件,但它似乎只触发Event::Quit,而不触发其他事件.我有一个非常简单的例子,就像这样

use sdl2;
use sdl2::event::Event;
use sdl2::keyboard::Keycode;

fn main() {

    let sdl_context = sdl2::init().unwrap();
    let mut event_pump = sdl_context.event_pump().unwrap();

    'event_loop:loop {
        for event in event_pump.poll_iter() {
            match event {
                Event::Quit { .. } => {
                    println!("Quit"); break 'event_loop;
                },
                Event::KeyDown { keycode:Some(Keycode::Escape), .. } => {
                    println!("Escape"); break 'event_loop;
                },
                Event::KeyDown { .. } => {
                    println!("KeyDown Triggered");
                },
                _ => {}
            }
        }
    }

}

但两个Event:KeyDown匹配从不触发,只能获得Event::Quit以触发Ctrl+C.我在一个基本的终端上用Debian做这件事.

推荐答案

所有SDL2 backends个都需要创建一个SDL_Window来接收键盘事件;它们不处理控制台/终端输入.

SDL1.2具有适用于AAliblibcacaback-ends,但它们没有被转发到SDL2:(

选项:

  • 创建一扇窗.
  • 回到SDL1.2.
  • 将SDL 1.2的AAlib/libcaca后端连接到SDL2.

Rust相关问答推荐

计算具有相邻调换且没有插入或删除的序列的距离

如何在Rust中获得不可辩驳的'if let'模式警告Mutex锁定?""

在一个tauri协议处理程序中调用一个rectuc函数的推荐技术是什么?

为什么要在WASM库中查看Rust函数需要`#[no_mangle]`?

交叉术语未正确清除屏幕

Rust TcpStream不能在读取后写入,但可以在不读取的情况下写入.为什么?

在使用#[NO_STD]时,如何在Rust中收到紧急消息?

将Vec<;U8&>转换为Vec<;{Float}&>

为什么AsyncRead在Box上的实现有一个Unpin特征绑定?

为什么我必须使用 PhantomData?在这种情况下它在做什么?

Rust,如何从 Rc> 复制内部值并返回它?

Rust Option 的空显式泛型参数

通过写入 std::io::stdout() 输出不可见

Rust 中的内存管理

为什么Rust中无法推断生命周期?

bcrypt 有长度限制吗?

Rust 引用元组和引用元组

没有通用参数的通用返回

相互调用的递归异步函数:检测到循环

Rust 中的运行时插件