SDL_Event.type всегда пуст после опроса - PullRequest
0 голосов
/ 15 ноября 2009

У меня есть общая функция, которая должна обрабатывать любое событие в очереди событий SDL. Пока что функция выглядит так:

int eventhandler(void* args){
  cout << "Eventhandler started.\n";
  while (!quit){
    while (SDL_PollEvent(&event)){
      cout << "Got event to handle: " << event.type << "\n";
      switch (event.type){
        SDL_KEYDOWN:
          keyDownHandler(event.key.keysym.sym);
          break;
        default:
          break;
      }
    }
  }
}

Однако, когда я тестирую функцию, я получаю целую кучу событий, но нет из них, похоже, имеют тип. Он даже не печатает 0 или что-нибудь - просто ничего. Вывод при нажатии любой клавиши выглядит так:

Got event to handle:

И больше ничего. Любое руководство и документы SDL говорят, что я должен обрабатывать подобные события, но это не работает. У кого-нибудь еще есть эта проблема или решение?

Кстати, обработчик событий запускается в SDL_Thread, но я не думаю, что это проблема.

1 Ответ

1 голос
/ 15 ноября 2009

То, что ничего не происходит, является результатом отсутствия case перед SDL_KEYDOWN.
При отсутствии case компилятор видит метку перехода, которую вы бы использовали, например, для goto SDL_KEYDOWN;, в результате чего метка default является единственной меткой в ​​операторе switch.

Я не понимаю, почему event.type не выводит, хотя, если вы не установите где-нибудь флаг потока,
event.type - это Uint8, который SDL просто определяет по умолчанию от целочисленных типов, поэтому он должен обрабатываться как единое целое. Как и любой целочисленный тип, он также не может быть «пустым» , но для него может быть вывод.

...