首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在winit事件中访问滚动轮增量?

如何在winit事件中访问滚动轮增量?
EN

Stack Overflow用户
提问于 2022-08-11 12:19:34
回答 1查看 125关注 0票数 1

目前,我正在通过编写一个使用温特处理窗口的小型图形程序来学习Rust。我的目标是使用滚动轮作为输入来实现缩放功能。

我的问题是,我不知道如何访问“增量”或车轮移动了多少(或至少在哪个方向)。我的事件循环如下所示:

代码语言:javascript
复制
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
                }
            }
        }
    }
});

在“匹配事件”一节中,我有处理用户输入事件(如键盘笔画)的所有逻辑。例如,为了匹配一个键,我会这样做:

代码语言:javascript
复制
match event {
    WindowEvent::KeyboardInput {
        input:
            KeyboardInput {
                state: ElementState::Pressed,
                virtual_keycode: Some(VirtualKeyCode::Space),
                ..
            },
        ..
    }
    // continue matching

为了匹配鼠标事件,我第一次尝试用WindowEvent::MouseInput,但这似乎是为了用于实际按钮,如左,右击等,所以我尝试使用WindowEvent::MouseWheel。当我移动车轮时,这个事件就会触发,但我不知道如何访问delta,以知道车轮在哪个方向移动以及移动了多少。

我不认为匹配与键一样有效,因为这是一个连续的值。我的猜测是,我需要使用下面代码中的注释从范围中访问"delta“,但我不知道如何做到。

代码语言:javascript
复制
match event {
    WindowEvent::MouseWheel {
        delta,
        ..
    } => {
        // how to access "delta" using "event"?
    }
EN

回答 1

Stack Overflow用户

发布于 2022-08-11 13:40:17

正如@jmb注释的那样,您只需在匹配之后从作用域中访问“增量”即可。我不知道我在做什么,我没看到。

因为"delta“本身是一个枚举,所以您还需要匹配它,例如:

代码语言:javascript
复制
match event {
    WindowEvent::MouseWheel { delta, .. } => {
        match delta {
            MouseScrollDelta::LineDelta(x, y) => {
                //
            }
            _ => {}
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73320553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档