入力にサブフレームの精度が必要なく、ゲームが常にアニメーション化されている場合は、SDL_PollEvent が適切です。
サブフレームの精度は、たとえば次の場合に重要になる可能性があります。プレーヤーが非常に小さな動きの増分を必要とする可能性のあるゲーム - キーをすばやくタップして離すと、「速度 = 1」を意味するキーダウンと「速度 = 0」を意味するキーアップの古典的な怠惰な方法を使用すると、予期しない動作が発生します。フレームごとに位置を更新します。タップがたまたまフレーム レンダリングとオーバーラップした場合、1 フレーム分の移動時間が得られます。そうでない場合は移動がありません。実際に必要なのは、タイムスタンプに基づくフレームの長さよりも小さい移動量です。イベントが発生した場所。
残念ながら、SDL のイベントにはオペレーティング システムからの実際のイベント タイムスタンプは含まれず、PumpEvents 呼び出しのタイムスタンプのみが含まれ、WaitEvent は 10 ミリ秒間隔で効果的にポーリングされるため、WaitEvent が別のスレッドで実行されている場合でも、得られる最高の精度は10 ミリ秒 (同じポーリング サイクルでキーダウンとキーアップを取得した場合、約 5 ミリ秒と言うと、より小さく概算できます)。
したがって、入力の正確なタイミングが本当に必要な場合は、実際には、SDL_Delay を小さくした独自のバージョンの SDL_WaitEventTimeout を作成し、それをメインのゲーム ループとは別のスレッドで実行する必要があります。
さらに残念なことに、SDL_PumpEvents は ( https://wiki.libsdl.org/SDL_PumpEventsごとに) ビデオ サブシステムを初期化したスレッドで実行する必要があるため、別のスレッドで入力ループを実行してサブフレームのタイミングを取得するという全体的なアイデアは破棄されます。 SDL フレームワークによって。
結論として、アニメーションを伴う SDL アプリケーションの場合、SDL_PollEvents 以外を使用する理由はありません。サブフレームレートの入力精度のためにできる最善の方法は、フレーム間で焼き付ける時間があれば、その間は正確にするオプションがありますが、入力が失われるフレームごとに奇妙なレンダリング期間ウィンドウが表示されます。精度なので、別の種類の不一致が発生します。