События
Введение
Этот урок представляет подробный перечень событий окна. Он описывает их и показывает как можно и нельзя использовать события.
Тип 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;
}
}