Skip to main content
各デバイスから受け取った生の入力パケットは、「読み取り」オブジェクトにカプセル化されます。読み取りには、元の生パケットデータと、(通常は) より高レベルの形式への生データの 1 つ以上の変換が含まれます。データコンテナとしての役割に加えて、読み取りは入力ストリーム内の特定の位置を参照する識別子としても機能します。

読み取りの取得

GameInput API は読み取りを取得する 2 つの方法を提供します。最も一般的な方法は、IGameInput インターフェイスのメソッドを介して、入力ストリームから直接それらにアクセスすることです。
GetCurrentReading を呼び出すと、入力ストリームから最新の読み取りを取得します。返される読み取りをゲームパッドやキーボードなどの特定の種類の入力に制限する、オプションの GameInputKind フィルターを渡すことができます。返される読み取りを指定したデバイスによって生成されたものだけに制限する、オプションの IGameInputDevice フィルターを渡すこともできます。これらのフィルターは個別または一緒に適用できます。 IGameInputReading インスタンスは参照カウント方式のシングルトンです。読み取りの取得は非常に高速で軽量な操作です。メモリ割り当てもコピーも行われず、API 呼び出しはロックフリーでカーネルモードへの遷移もありません。読み取りはシングルトンであるため、アプリケーションは読み取りポインターの等価性を比較して、GetCurrentReading への 2 つの呼び出しが同じ読み取りを返したかどうか (つまり、新しい入力が生成されなかったかどうか) を判別できます。 比較的シンプルな入力ニーズを持つゲームは、フレームごとに新しい入力を単純にポーリングし、2 つの読み取り (同じ読み取りでない場合) に保存された状態の違いを比較するだけかもしれません。しかし、より複雑な入力ニーズを持つゲームでは、前のフレーム以降に発生したすべての入力状態変化を完全に把握するために、入力ストリームを歩く必要があるかもしれません。これは、GetNextReading および GetPreviousReading メソッドによって可能になります。これらは GetCurrentReading と同じフィルターを許可します。入力ストリームはバッファ内で最後の 0.5 秒の履歴読み取りを維持します。
あるいは、アプリケーションは入力が生成されるたびに呼び出されるコールバックを登録できます。以前の同期メソッドと同様に、返される読み取りの種類とデバイスを制御するために、いくつかのフィルターを適用できます。詳細については、GameInput の高度なトピックセクションの GameInput コールバック を参照してください。

読み取りからのデータの取得

すべての読み取りにはデバイスからの生の入力パケットデータが含まれていますが、読み取りには通常、そのデータの 1 つ以上の高レベル変換も含まれます。たとえば、ゲームパッドから受け取った入力は、既知のボタンとサムスティック識別子を持つ標準的な固定形式構造体にも解析されます。読み取りには同じ生の入力データの複数の異なる表現が含まれていることが多く、アプリケーションはニーズに最適な形式を選択できます。 アプリケーションは、GetInputKind メソッドを呼び出すことで、読み取りに含まれるデータの種類を問い合わせることができます。これは GameInputKind 列挙型の 1 つ以上のフラグ値を返します。
読み取りで利用可能なデータの種類は、入力デバイスとその物理的特性によって異なります。たとえば、標準的なキーボードからの読み取りにはキーボードデータのみが含まれる場合がありますが、統合トラックボール付きキーボードからの読み取りにはキーボードとマウスの両方のデータが含まれる場合があります。 ほぼすべてのゲームコントローラーは、匿名の軸とボタン状態の集まりである汎用的な「コントローラー」データを含む読み取りを生成します。これにより、入力マッピング UI を持つアプリケーションに対して幅広いデバイスサポートが可能になります。ただし、多くのゲームコントローラー (ゲームパッドなど) は、読み取りに馴染みのある固定形式の状態も公開しており、これは典型的なゲームが利用しやすいものです。
IGameInputReading インターフェイスには、読み取りがサポートするあらゆる形式で状態を取得するためのメソッドが含まれています。読み取りから利用可能なすべての異なる表現は事前に計算されているため、これらのメソッドは数バイトのデータをコピーして返すだけです。

シンプルなゲームパッド入力ループ

以下のサンプルコードは、ゲームパッド用に完全に機能する入力ループの一例です。このサンプルで注目すべき点の 1 つは、明示的なデバイス列挙がないことです。IGameInputDevice の唯一の使用はデバイス識別子としてです。そのメソッドは一度も呼び出されません。これは、GameInput API の入力中心の性質と、一般的な入力シナリオでコードをどのように簡素化できるかを示しています。

リファレンス API ドキュメント

関連項目

GameInput の基礎 GameInput の高度なトピック GameInput API リファレンス
最終更新日 2026年8月13日