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次下载

CC0 许可证

31KB
755

buttons

Crates.io Docs.rs

一个简单的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