以前はSDLにSDL_EnableKeyRepeat()
という名前の関数がありましたが、SDL2にはもうありません。
SDL2-wikiで検索しましたが、関連するものが見つかりませんでした。
何か案は?
キーボードイベントを処理するときは、繰り返しイベントであるイベントをすべて除外します。つまり、SDL_KeyboardEvent
ユニオンのSDL_Event
のrepeat
フィールドを確認します。
例えば:
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
}
}
押されたすべてのキーを通知する SDL_GetKeyboardState 関数を使用した方がよい場合があります。イベントのrepeat
フラグをチェックして、繰り返しがtrueの場合は無視することもできます。
「下」キーをリストに追加し、KEY_UPをキャッチしたときにそれらを削除することで、自分でそれを行うことができます。各フレームでリストを繰り返して、どのキーがまだ下にあるかを知ることができます。