2015-06-21 46 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