Как отключить повторение ключа в SDL2?

В SDL существовала функция с именем SDL_EnableKeyRepeat(), но больше не в SDL2.

Я искал в SDL2-wiki, но не смог найти что-либо релевантное.

Любые идеи?

Ответ 1

При обработке события клавиатуры просто отфильтровывайте события, которые являются событиями повторения, т.е. проверяют поле repeat в SDL_KeyboardEvent союза SDL_Event.

Например:

SDL_Event event;
while (SDL_PollEvent(&event)) {
  if (event.type == SDL_QUIT) {
    quit = true;
  }
  if (event.type == SDL_KEYDOWN && event.key.repeat == 0) {
    if (event.key.keysym.sym == SDLK_d)
      debug = debug ? false : true;
    // ... handle other keys
  }
}

См. https://wiki.libsdl.org/SDL_KeyboardEvent

Ответ 2

Вы можете сделать это сами, добавив свой "вниз" ключ в список и удалив их, когда вы поймаете KEY_UP, и в каждом кадре вы можете перебирать свой список, чтобы узнать, какая клавиша все еще отсутствует.

Ответ 3

Вам может быть лучше обслуживается функция SDL_GetKeyboardState, которая сообщает вам все нажатые клавиши. Вы также можете просто проверить флаг repeat в событии и проигнорировать, когда значение repeat истинно.