Проверьте состояние колеса мыши SFML

В моей программе я хотел бы знать, прокручивалось ли колесо мыши, и если да, то в каком направлении. Это возможно с C ++ и SFML?

Пока у меня есть это:

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

Но вторая строка никогда не исчезает, даже когда я прокручиваю колесо мыши

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::MouseWheelMoved является осуждается в SFML 2.3,

Используйте это вместо:

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;
}
5

Другие решения


По вопросам рекламы [email protected]