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
4,625 每月下载量
用于 52 个 crate (42 直接使用)
28KB
446 行
Winit 输入助手
处理并存储 winit 事件,允许在任何时间查询输入状态。
使用方法
每个事件都通过 WinitInputHelper
的 update
方法传递。
然后可以通过如 key_pressed
、key_released
、key_held
、mouse
、mouse_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