В 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
}
}
Вы можете сделать это сами, добавив свой "вниз" ключ в список и удалив их, когда вы поймаете KEY_UP, и в каждом кадре вы можете перебирать свой список, чтобы узнать, какая клавиша все еще отсутствует.
Ответ 3
Вам может быть лучше обслуживается функция SDL_GetKeyboardState, которая сообщает вам все нажатые клавиши. Вы также можете просто проверить флаг repeat в событии и проигнорировать, когда значение repeat истинно.