Я уже некоторое время пользуюсь SDL, но теперь мне кажется, что я поступаю неправильно при работе с событиями клавиатуры.
Обычно мой основной цикл выглядит примерно так:
int main() {
SDL_Init(SDL_INIT_VIDEO);
/* Some video system initializations */
/* Main loop */
for(;;) {
SDL_PumpEvents();
const unsigned char *key = SDL_GetKeyboardState(nullptr);
/* Do something with the keys pressed */
}
}
... и это хорошо сработало для меня. Но я недавно просмотрел несколько примеров кода, и технически все они используют другой шаблон:
int main() {
SDL_Init(SDL_INIT_VIDEO);
/* Some video system initializations */
/* Main loop */
for(;;) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
/* switch/case to know keys pressed */
}
}
}
Итак, просмотрев документацию по SDL, я обнаружил, что SDL_PollEvent
вызывает SDL_PumpEvents
. Ссылка SDL_PollEvent
И что SDL_PumpEvents
собирает состояние всех устройств ввода для генерации объектов событий. Ссылка SDL_PumpEvents
Итак, в первом примере я не сбрасываю очередь событий, так почему же она работает без сбоев? Является ли второй шаблон правильным способом получения состояния ввода?