update()
ユーザーからのキーボード入力を「更新」するメソッドを1秒間にn回実行しているので、後でプログラムのロジック部分で読み取ることができます。そのため、SDLドキュメントでこれを実装する2つの方法を見つけましたが、どちらを使用すればよいかわかりません。
1; SDL_PollEventを使用してすべてのイベントをループし、キーのダウン/アップイベントを検索し、キーの状態をマップに保存して、プログラムのロジックで各キーの状態を確認できるようにします。
注:または、SDL_PollEventの代わりにSDL_PeepEventsを使用して、重要なイベントタイプのみを取得することもできます。したがって、キュー上のイベントを「破棄」することはありません。
std::map<int, bool> keyboard; // Saves the state(true=pressed; false=released) of each SDL_Key.
void update()
{
SDL_Event event;
while( SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_KEYDOWN:
keyboard[event.key.keysym.sym] = false;
break;
case SDL_KEYUP:
keyboard[event.key.keysym.sym] = true;
break;
}
}
}
2; フレームごとにキーボードからスナップショットを取り、簡単に読み取れるようにします。
Uint8* keyboard;
void update()
{
SDL_PumpEvents();
keyboard = SDL_GetKeyState(NULL);
}
上記の実装のいずれかで、私は次のように読むことができますkeyboard
:
if (key_map[SDLK_Return]) printf("Return has been pressed.");
また、そうする別の方法はありますか?