GameInput の読み取り
GameInput の読み取り
各デバイスから受け取った生の入力パケットは、「読み取り」オブジェクトにカプセル化されます。読み取りには、元の生パケットデータと、(通常は) より高レベルの形式への生データの 1 つ以上の変換が含まれます。データコンテナとしての役割に加えて、読み取りは入力ストリーム内の特定の位置を参照する識別子としても機能します。
GetCurrentReading を呼び出すと、入力ストリームから最新の読み取りを取得します。返される読み取りをゲームパッドやキーボードなどの特定の種類の入力に制限する、オプションの GameInputKind フィルターを渡すことができます。返される読み取りを指定したデバイスによって生成されたものだけに制限する、オプションの IGameInputDevice フィルターを渡すこともできます。これらのフィルターは個別または一緒に適用できます。
IGameInputReading インスタンスは参照カウント方式のシングルトンです。読み取りの取得は非常に高速で軽量な操作です。メモリ割り当てもコピーも行われず、API 呼び出しはロックフリーでカーネルモードへの遷移もありません。読み取りはシングルトンであるため、アプリケーションは読み取りポインターの等価性を比較して、GetCurrentReading への 2 つの呼び出しが同じ読み取りを返したかどうか (つまり、新しい入力が生成されなかったかどうか) を判別できます。
比較的シンプルな入力ニーズを持つゲームは、フレームごとに新しい入力を単純にポーリングし、2 つの読み取り (同じ読み取りでない場合) に保存された状態の違いを比較するだけかもしれません。しかし、より複雑な入力ニーズを持つゲームでは、前のフレーム以降に発生したすべての入力状態変化を完全に把握するために、入力ストリームを歩く必要があるかもしれません。これは、GetNextReading および GetPreviousReading メソッドによって可能になります。これらは GetCurrentReading と同じフィルターを許可します。入力ストリームはバッファ内で最後の 0.5 秒の履歴読み取りを維持します。
あるいは、アプリケーションは入力が生成されるたびに呼び出されるコールバックを登録できます。以前の同期メソッドと同様に、返される読み取りの種類とデバイスを制御するために、いくつかのフィルターを適用できます。詳細については、GameInput の高度なトピックセクションの GameInput コールバック を参照してください。
読み取りで利用可能なデータの種類は、入力デバイスとその物理的特性によって異なります。たとえば、標準的なキーボードからの読み取りにはキーボードデータのみが含まれる場合がありますが、統合トラックボール付きキーボードからの読み取りにはキーボードとマウスの両方のデータが含まれる場合があります。
ほぼすべてのゲームコントローラーは、匿名の軸とボタン状態の集まりである汎用的な「コントローラー」データを含む読み取りを生成します。これにより、入力マッピング UI を持つアプリケーションに対して幅広いデバイスサポートが可能になります。ただし、多くのゲームコントローラー (ゲームパッドなど) は、読み取りに馴染みのある固定形式の状態も公開しており、これは典型的なゲームが利用しやすいものです。
IGameInputReading インターフェイスには、読み取りがサポートするあらゆる形式で状態を取得するためのメソッドが含まれています。読み取りから利用可能なすべての異なる表現は事前に計算されているため、これらのメソッドは数バイトのデータをコピーして返すだけです。
最終更新日 2026年8月13日
関連トピック
Windows.XBOX.Input から GameInput への移植GameInputArcadeStickButtonsInput概要IGameInput::GetNextReading