8个版本
使用旧的Rust 2015
0.2.1 | 2016年4月3日 |
---|---|
0.1.1 | 2015年11月24日 |
0.0.5 | 2015年10月29日 |
0.0.2 | 2015年9月30日 |
#1712 在 硬件支持
26KB
410 行
rebind
一个将输入键绑定到操作并修改鼠标行为的库。键可以绑定到操作,并在运行时进行转换。使用HashMap
将Keys
映射到Actions
,因此查找时间是常数。要在您的应用程序中使用此crate,只需在您的Cargo.toml
中添加以下内容:
[dependencies]
rebind = "*"
API示例
extern crate glutin_window;
extern crate piston;
extern crate rebind;
use glutin_window::GlutinWindow;
use piston::event_loop::Events;
use piston::input::Event;
use piston::input::Button::Keyboard;
use piston::input::keyboard::Key;
use piston::window::WindowSettings;
use rebind::{Action, Builder, Translated};
#[derive(Clone, Copy, Eq, Hash, Ord, PartialEq, PartialOrd)]
enum MyAction {
Action1, Action2
}
impl Action for MyAction { }
fn main() {
let window: GlutinWindow = WindowSettings::new("rebind-example", (800, 600))
.build()
.expect("Could not create window");
let translator = Builder::<MyAction>::new((800, 600))
.with_mapping(MyAction::Action1, Keyboard(Key::D1))
.with_mapping(MyAction::Action1, Keyboard(Key::A))
.with_mapping(MyAction::Action2, Keyboard(Key::D2))
.with_mapping(MyAction::Action2, Keyboard(Key::B))
.build_translator();
for e in window.events() {
if let Event::Input(ref i) = e {
if let Some(a) = translator.translate(i) {
match a {
Translated::Press(MyAction::Action1) => {
println!("Action 1 pressed!");
},
Translated::Press(MyAction::Action2) => {
println!("Action 2 pressed!");
},
_ => { }
}
}
}
}
}
自定义哈希器
当自定义哈希器稳定后,将能够指定用于从键查找操作的哈希算法。在此之前,哈希器无法通过构建器进行配置,默认使用SipHasher。但是,如果您使用的是nightly编译器,您可以在Cargo.toml
中将Fnv哈希器作为选项启用。
[dependencies.rebind]
version = ">=0.3"
features = ["fnv"]
rebind_plugins
此库有一个名为rebind_plugins
的配套crate。如果您使用的是nightly编译器,则可以使用此crate,它包含用于声明Action
的特殊derive
注解。
#![feature(plugin)]
#![plugin(rebind_macros)]
#[derive(Action)]
enum MyAction {
Action1, Action2
}
// ... rest of example as normal
示例应用程序
一个展示主要功能(以及用于驱动此库设计决策的主要方法)的示例应用程序位于example/
文件夹中。该示例基于稳定版本构建,尽管您可以通过传递--features "rebind_plugins"
以及您通常使用的Cargo咒语来构建它以使用rebind_plugins
包。
待改进的主要功能
- 实现从InputTranslator到InputRebind的转换
- 改进API:InputRebind和InputTranslator之间的区别是否必要或有用?
- 添加序列化
- 添加鼠标灵敏度选项
- 添加更多测试/基准测试
- 改进文档
- 添加双击检测
- 将内部查找从
HashMap
更改为数组,其中操作存储在对应于键的数值的数组位置。这应该比使用HashMap
更快,并且碰撞/算法性DOS攻击不是问题,尽管映射的大小通常很小,查找相对较快,因此这可能在实践中不是问题。
欢迎贡献。
依赖项
~1MB
~20K SLoC