6个版本 (破坏性)
0.5.0 | 2023年7月22日 |
---|---|
0.4.0 | 2022年11月14日 |
0.3.1 | 2020年12月23日 |
0.2.0 | 2020年7月12日 |
0.1.0 | 2019年1月1日 |
#1190 in 游戏开发
每月26次下载
31KB
755 行
buttons
一个简单的Rust库,用于管理和查询输入状态。
使用方法
与 winit
(启用 winit
功能)。
let mut event_loop = winit::event_loop::EventLoop::new();
let mut keyboard = buttons::winit::keyboard();
let mut mouse = buttons::winit::mouse();
let mut touch = buttons::winit::touch();
// Track input
event_loop.run(move |event, _, _| {
keyboard.handle_event(&event);
mouse.handle_event(&event);
touch.handle_event(&event);
// Check state
if keyboard.pressed(VirtualKeyCode::Escape)
|| mouse.released(MouseButton::Right)
|| touch.first_touch().is_some()
{
// Do something
}
});
lib.rs
:
这是一个简单的Rust库,用于管理和查询输入状态。
它将鼠标和键盘视为不可变数据结构,您可以通过查询来找到哪些键和按钮被按下(或指针的位置)。
Mouse 和 Keyboard 的核心数据结构是泛型的,理论上支持多个窗口库。您可以自己实现,或者启用 winit
,它具有工厂方法,可以轻松创建与 winit
库一起工作的 Mouse 和 Keyboard。
如前所述,鼠标和键盘是不可变的。为了跟踪输入变化,每个都提供一个 begin_frame_input
方法,该方法返回一个您可以对其进行更改的对象。
示例
let mut event_loop = winit::event_loop::EventLoop::new();
let mut keyboard = buttons::support::winit::keyboard();
let mut mouse = buttons::support::winit::mouse();
let mut touch = buttons::support::winit::touch();
// Track input
event_loop.run(move |event, _, _| {
keyboard.handle_event(&event);
mouse.handle_event(&event);
touch.handle_event(&event);
// Check state
if keyboard.pressed(VirtualKeyCode::Escape)
|| mouse.released(MouseButton::Right)
|| touch.first_touch().is_some()
{
// Do something
}
});
依赖项
~2–13MB
~143K SLoC