События
Введение
Этот урок представляет подробный перечень событий окна. Он описывает их и показывает как можно и нельзя использовать события.
Тип sf::Event
Прежде чем перейти к событиям, важно понять что из себя представляет тип sf::Event и как правильно им пользоваться. sf::Event — это объединение, а значит, что только один из членов этого объединения допустим (т.е. существует) в данный момент времени (все элементы объединения хранятся в одной области памяти; за подробностями — в любой учебник по с++). Допустимым членом является тот, который соответствует типу события, например event.key для события KeyPressed. Попытка считывания другого члена приведёт к неопределённому поведению (скорее всего вы получите недопустимые или случайные значения). Поэтому никогда не пытайтесь использовать член события, который не соответствуют типу этого события.
Экземпляры sf::Event в качестве аргументов принимаются методом pollEvent() (или waitEvent()) класса sf::Window. Только две эти функции могут предоставить допустимые события, любая попытка использовать sf::Event без предварительного успешного вызова pollEvent() (или waitEvent()) приведёт к такому же неопределённому поведению, о котором говорилось выше.
Для большей ясности, вот так выглядит типичный цикл с использованием событий:
sf::Event event; // пока имеются события в очереди... while (window.pollEvent(event)) { // проверка типа события... switch (event.type) { // закрытие окна case sf::Event::Closed: window.close(); break; // нажатие клавиш case sf::Event::KeyPressed: ... break; // мы не обрабатываем другие типы событий default: break; } }