2015-06-21 45 views
1

在我的程序中,我希望能够知道鼠标滚轮是否滚动,如果有的话,在多大的方向上滚动多少。这可能与C++和SFML?检查鼠标滚轮状态SFML

到目前为止,我有这样的:

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

但第二线从未exicutes,甚至当我滚动鼠标滚轮

回答

4

您可以阅读鼠标滚轮为被调查事件循环的一部分每帧一次:

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::MouseWheelMoved已弃用SFML 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; 
} 
+1

[本答案是在2.3弃用。](http://www.sfml-dev.org/tutorials/2.3/window-events.php#the-mousewheelmoved-event)使用改为'MouseWheelScrolled'。 – Hiura

+0

@Hiura谢谢,我已经更新了答案以包含您的信息。 – Galik