我目前正在通过编写一个使用winit进行窗口处理的小型图形程序来学习Rust。我的目标是使用滚轮作为输入来实现缩放功能。
我的问题是我不知道如何访问";Δ;或者轮子移动了多少(或者至少在哪个方向上(。我的事件循环如下:
event_loop.run(move |event, _, control_flow| {
match event {
Event::WindowEvent {
ref event,
window_id,
} if window_id == window.id() => {
if !state.input(event) {
match event {
// match events
}
}
}
}
});
在";比赛事件";第一节介绍了与处理用户输入事件(如键盘敲击(相关的所有逻辑。例如,为了匹配一个密钥,我会这样做:
match event {
WindowEvent::KeyboardInput {
input:
KeyboardInput {
state: ElementState::Pressed,
virtual_keycode: Some(VirtualKeyCode::Space),
..
},
..
}
// continue matching
为了匹配鼠标事件,我第一次尝试使用WindowEvent::MouseInput
,但这似乎是为了配合实际的按钮,如左键、右键等,所以我尝试使用WindowEvent::MouseWheel
。当我移动轮子时会触发此事件,但我不知道如何访问delta
以了解轮子向哪个方向移动以及移动了多少。
我不认为像键那样匹配有效,因为这是一个连续值。我的猜测是,我需要访问";Δ;在下面的代码中有注释,但我不知道如何做。
match event {
WindowEvent::MouseWheel {
delta,
..
} => {
// how to access "delta" using "event"?
}
正如@jmb所评论的,您可以直接访问;Δ;比赛结束后从范围内。我不确定我在做什么,所以我没有看到。
由于";Δ;它本身是一个枚举,您还需要匹配它,例如:
match event {
WindowEvent::MouseWheel { delta, .. } => {
match delta {
MouseScrollDelta::LineDelta(x, y) => {
//
}
_ => {}
}
}