#input #winit #state #helper #cache #winit-window

winit_input_helper

处理 winit 事件,允许在任何时间查询输入状态

27 个版本 (15 个重大变更)

0.16.0 2024年3月4日
0.15.1 2023年11月12日
0.14.1 2023年3月25日
0.13.0 2022年8月1日
0.2.0 2018年11月8日

#2 in #winit

Download history 2180/week @ 2024-04-23 2017/week @ 2024-04-30 1292/week @ 2024-05-07 1263/week @ 2024-05-14 1402/week @ 2024-05-21 1648/week @ 2024-05-28 1281/week @ 2024-06-04 1213/week @ 2024-06-11 1257/week @ 2024-06-18 1237/week @ 2024-06-25 263/week @ 2024-07-02 780/week @ 2024-07-09 1110/week @ 2024-07-16 1074/week @ 2024-07-23 1227/week @ 2024-07-30 1045/week @ 2024-08-06

4,625 每月下载量
用于 52 个 crate (42 直接使用)

MIT 许可证

28KB
446

Winit 输入助手

Crates.io Docs

处理并存储 winit 事件,允许在任何时间查询输入状态。

使用方法

每个事件都通过 WinitInputHelperupdate 方法传递。

然后可以通过如 key_pressedkey_releasedkey_heldmousemouse_diff 等方法访问当前输入状态。

要查看所有可用方法,请参阅 docs.rs

use winit::event_loop::EventLoop;
use winit::keyboard::{Key, KeyCode};
use winit::window::WindowBuilder;
use winit_input_helper::WinitInputHelper;

fn main() {
    let mut input = WinitInputHelper::new();

    let event_loop = EventLoop::new().unwrap();
    let _window = WindowBuilder::new().build(&event_loop).unwrap();

    event_loop
        .run(move |event, elwt| {
            // Pass every event to the WinitInputHelper.
            // It will return true when the last event has been processed and it is time to run your application logic.
            if input.update(&event) {
                if input.key_released(KeyCode::KeyQ) || input.close_requested() || input.destroyed()
                {
                    elwt.exit();
                    return;
                }

                if input.key_pressed(KeyCode::KeyW) {
                    println!("The 'W' key (US layout) was pressed on the keyboard");
                }

                if input.key_held(KeyCode::KeyR) {
                    println!("The 'R' key (US layout) key is held");
                }

                // query the change in cursor this update
                let cursor_diff = input.cursor_diff();
                if cursor_diff != (0.0, 0.0) {
                    println!("The cursor diff is: {:?}", cursor_diff);
                    println!("The cursor position is: {:?}", input.cursor());
                }

                // You are expected to control your own timing within this block.
                // Usually via rendering with vsync.
                // render();
            }
        })
        .unwrap();
}

发布新版本

为了避免强制用户启用默认的 winit 后端,winit_input_helper 将其 winit 依赖项设置为 default-features = false。这稍微复杂了发布过程,因为 winit 无法在没有启用任何后端的情况下编译。

因此,为了发布,我们运行: cargo publish --features winit/default

依赖

~2–15MB
~209K SLoC