SDL_WaitEvent: как убить все в очереди? - PullRequest
1 голос
/ 29 июля 2010

Я использую это в своем основном цикле:

if (SDL_WaitEvent(&event)) {
            switch (event.type) {
            case SDL_MOUSEBUTTONDOWN:
                mainClicker(event.button.x, event.button.y);
            break;
..... etc

Все отлично работает, но:

В «экране 1» пользователь делает вещи и нажимает кнопку. Затем приложение выполняет свою работу и показывает экран результатов с другими кнопками. Проблема заключается в том, что если вы случайно нажмете до полного отображения экрана результатов (2-5 секунд - с помощью SDL_Delay), MOUSEBUTTONDOWN будет сохранен (кэширован), а затем немедленно использован на экране 2. Так что, если вам «повезло», Вы можете нажать некоторые кнопки screen2 даже до того, как они отобразятся.

Есть ли способ очистки очереди событий SDL (не уверен, как она на самом деле называется)?

Спасибо.

1 Ответ

1 голос
/ 29 июля 2010

После обработки события для активизации экрана результатов, вызовите его перед обработкой следующего события:

SDL_EventState(SDL_MOUSEBUTTONDOWN, SDL_IGNORE);

После загрузки экрана результатов позвоните:

SDL_EventState(SDL_MOUSEBUTTONDOWN, SDL_ENABLE);
...