35次发布
0.10.9 | 2024年7月28日 |
---|---|
0.10.7 | 2024年4月28日 |
0.10.6 | 2024年3月16日 |
0.10.4 | 2023年12月3日 |
0.3.1 | 2016年9月23日 |
#9 in 游戏开发
100,768 每月下载
在 139 个Crate(45个直接) 中使用
380KB
9K SLoC
吉尔Rs - Rust游戏输入库
吉尔Rs抽象了平台特定的API,以提供统一的接口来处理游戏手柄。
主要功能
- 统一的游戏手柄布局——按钮和轴用熟悉的名称表示
- 支持SDL2映射,包括Steam使用的环境变量
SDL_GAMECONTROLLERCONFIG
- 热插拔——吉尔Rs将尝试为新游戏手柄分配新的ID,并重新使用重新连接的游戏手柄的同一ID
- 震动(rumble)反馈
- 电源信息(游戏手柄是否有线,当前电池状态)
项目的主要仓库位于GitLab上 是GitLab,尽管还有一个 GitHub镜像。请使用GitLab的问题跟踪器和合并请求。
此仓库包含子模块;在您克隆它之后,不要忘记运行 git submodule init; git submodule update
(或使用--recursive
标志进行克隆)或您将遇到编译错误。
示例
[dependencies]
gilrs = "0.10.3"
use gilrs::{Gilrs, Button, Event};
let mut gilrs = Gilrs::new().unwrap();
// Iterate over all connected gamepads
for (_id, gamepad) in gilrs.gamepads() {
println!("{} is {:?}", gamepad.name(), gamepad.power_info());
}
let mut active_gamepad = None;
loop {
// Examine new events
while let Some(Event { id, event, time }) = gilrs.next_event() {
println!("{:?} New event from {}: {:?}", time, id, event);
active_gamepad = Some(id);
}
// You can also use cached gamepad state
if let Some(gamepad) = active_gamepad.map(|id| gilrs.gamepad(id)) {
if gamepad.is_pressed(Button::South) {
println!("Button South is pressed (XBox - A, PS - X)");
}
}
}
支持的功能
输入 | 热插拔 | 震动反馈 | |
---|---|---|---|
Linux/BSD(evdev) | ✓ | ✓ | ✓ |
Windows(XInput) | ✓ | ✓ | ✓ |
OS X | ✓ | ✓ | ✕ |
Wasm | ✓ | ✓ | n/a |
Android | ✕ | ✕ | ✕ |
平台特定说明
Linux/BSD(evdev)
使用evdev,吉尔Rs直接从适当的 /dev/input/event*
文件读取(在需要震动反馈的情况下写入)。这意味着用户必须具有对此文件的读写访问权限。在大多数发行版中,这不应该是一个问题,但如果有问题,您将不得不创建udev规则。在FreeBSD上,通用HID游戏手柄使用hgame(4),并通过webcamd
使用特殊的Linux驱动程序。
要构建吉尔Rs,您需要pkg-config和libudev .pc文件。在某些发行版中,此文件包含在单独的存档中(例如,Debian中的libudev-dev
,FreeBSD中的libudev-devd
)。
Wasm
Wasm实现使用stdweb,或带有wasm-bindgen功能的wasm-bindgen。对于stdweb,您需要cargo-web来构建wasm32-unknown-unknown的gilrs。对于wasm-bindgen,您需要wasm-bindgen命令行工具或类似wasm-pack的工具。与其他平台不同,事件仅在您调用Gilrs::next_event()
时才会生成。
有关使用Wasm运行示例的说明,请参阅./gilrs/examples/wasm/README.md
。
许可证
本项目受Apache许可证(版本2.0)和MIT许可证的条款约束。有关详细信息,请参阅LICENSE-APACHE和LICENSE-MIT。
依赖关系
~0.3–26MB
~356K SLoC