【问题标题】:Check mouse wheel state SFML检查鼠标滚轮状态 SFML
【发布时间】:2015-06-21 03:42:57
【问题描述】:

在我的程序中,我希望能够知道鼠标滚轮是否已滚动,如果滚动了,则朝哪个方向滚动了多少。 C++ 和 SFML 可以做到这一点吗?

到目前为止,我有这个:

if (sf::Event::MouseWheelEvent().delta != 0)
{
    SimulationView.zoom(1 + (10 / sf::Event::MouseWheelEvent().delta));
}

但是第二行永远不会执行,即使我滚动鼠标滚轮

【问题讨论】:

    标签: c++ sfml mousewheel


    【解决方案1】:

    您可以在每帧轮询一次的事件循环中读取鼠标滚轮:

    int main()
    {
        sf::RenderWindow window(sf::VideoMode(320, 256), "Title");
    
        sf::Event event;
        while(window.isOpen())
        {
            while(window.pollEvent(event))
            {
                if(event.type == sf::Event::Closed)
                    window.close();
                else if(event.type == sf::Event::MouseWheelMoved)
                {
                    // display number of ticks mouse wheel has moved
                    std::cout << event.mouseWheel.delta << '\n';
                }
            }
    
            window.clear();
    
            // draw window here
    
            window.display();
        }
    }
    

    注意:对于SFML 2.3

    感谢@Hiura 指出sf::Event::MouseWheelMovedSFML 2.3已弃用

    Use this instead:

    if(event.type == sf::Event::MouseWheelScrolled)
    {
        if(event.mouseWheelScroll.wheel == sf::Mouse::VerticalWheel)
            std::cout << "wheel type: vertical" << std::endl;
        else if(event.mouseWheelScroll.wheel == sf::Mouse::HorizontalWheel)
            std::cout << "wheel type: horizontal" << std::endl;
        else
            std::cout << "wheel type: unknown" << std::endl;
    
        std::cout << "wheel movement: " << event.mouseWheelScroll.delta << std::endl;
        std::cout << "mouse x: " << event.mouseWheelScroll.x << std::endl;
        std::cout << "mouse y: " << event.mouseWheelScroll.y << std::endl;
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多