Share via


DirectInput の概要

DirectInput は、マウス、キーボード、ジョイスティック、その他のゲーム コントローラーなどの入力デバイスと、フォース フィードバック (入力/出力) デバイスに使用される API です。

ここでは、DirectInput の機能とアプリケーションでのセットアップ方法について概説します。DirectInput の動作に関する包括的な説明については、「DirectInput について」を参照してください。 DirectInput API の使用に関する段階的な説明については、以下のトピックを参照してください。

DirectInput の性能

DirectInput は、アプリケーションがバックグラウンドで動作しているときでも入力デバイスからデータを取得できるようにします。また、あらゆる種類の入力デバイスとフォース フィードバックを完全にサポートします。

アクション マッピング機能により、アプリケーションは入力データがどの種類のデバイスで生成されているかを知ることなくそのデータを取得できます。

DirectInput は、そのサービスが拡張され、パフォーマンスが改善されたことで、Windows で実行されるゲーム、シミュレーション、その他のリアルタイムの対話型アプリケーションにとって重要なツールとなっています。

DirectInput は、テキスト入力にキーボードを使用するアプリケーションやナビゲーションにマウスを使用するアプリケーションにはメリットをもたらしません。詳細については、「Windows とのインタラクション」を参照してください。

DirectInput の基礎知識

ここでは、簡単なアプリケーションで DirectInput をセットアップして使用する方法について概説します。

ここで示す手順の詳細と例については、「DirectInput の使用方法」および「DirectInput チュートリアル」を参照してください。

    DirectInput を理解するには、次の用語を理解している必要があります。

  • DirectInput オブジェクト
    ルートの DirectInput インターフェイスです。
  • デバイス
    キーボード、マウス、ジョイスティック、またはその他の入力デバイスです。
  • DirectInputDevice オブジェクト
    キーボード、マウス、ジョイスティック、その他の入力デバイスを表すコードです。
  • デバイス オブジェクト
    DirectInput デバイス オブジェクト上のキー、ボタン、トリガーなどを表すコードです。デバイス オブジェクト インスタンスとも呼ばれます。

以下の手順は DirectInput の簡単な実装を示しています。この実装では、各データ アイテムを生成したデバイス オブジェクト (ボタンや軸など) がアプリケーションによって確認されます。

  1. DirectInput オブジェクトを作成します。

    このオブジェクトのメソッドを使用してデバイスを列挙し、DirectInput デバイス オブジェクトを作成します。

  2. デバイスを列挙します。

    システム マウスまたはキーボードのみを使用する場合は、この手順を省略できます。ユーザーのシステムで他に使用可能な入力デバイスを確認するには、DirectInput を使ってそれらを列挙します。設定した基準と一致するデバイスを DirectInput が検出するたびに、そのデバイスの機能を調べることができます。また、そのデバイスを表す DirectInput デバイス オブジェクトの作成に使用できる一意の ID が取得されます。

  3. 使用するデバイスごとに DirectInputDevice オブジェクトを作成します。

    そのためには、列挙時に取得した一意の ID が必要です。システム マウスまたはキーボードには、標準のグローバル一意識別子 (GUID) を使用できます。

  4. デバイスをセットアップします。

    まず、デバイスを他のアプリケーションやシステムと共有する方法を決定する協調レベルを、デバイスごとに設定します。また、データ パケット内でボタンや軸などのデバイス オブジェクトを識別するためのデータ フォーマットを設定する必要があります。バッファリングされたデータ、つまり状態ではなくイベントを取得する場合は、バッファー サイズの設定も必要になります。オプションとして、この段階でデバイスに関する情報を取得し、それに応じてアプリケーションの動作を調整することができます。また、ジョイスティック軸によって返される値の範囲などのプロパティも設定できます。

  5. デバイスを取得します。

    この段階で、デバイスからデータを受信できるようになったことを DirectInput に知らせます。

  6. データを取得します。

    定期的に (通常はメッセージ ループまたはレンダリング ループを通過するたびに)、各デバイスの現在の状態、または最後の取得以降に発生したイベントの記録を取得します。必要に応じて、イベントが発生するたびに DirectInput から通知を受けるように設定することもできます。

  7. データに基づいて処理を行います。

    アプリケーションは、ボタンや軸の状態に対応したり、キーの押下や解放などのイベントに対応したりできます。

  8. DiretInput を終了します。

    終了する前に、アプリケーションはすべてのデバイスの取得を解除して解放し、DirectInput オブジェクトを解放する必要があります。

これは、DirectInput の実装方法の 1 つにすぎません。現在そして今後提供されるさまざまな入力デバイスを利用し、ユーザー向けに構成を簡素化するために、アクション マッピングを使用できます。

デバイスにアクション マップを設定することで、アプリケーションの各アクションに使用されるデバイス オブジェクトを DirectInput で決定できます。たとえば、レーシング ゲームのスロットルを常に y 軸で制御するように指定するのではなく、AXIS_THROTTLE というアクションを作成し、DirectInput によってそのアクションがデバイス上の最も適切な軸に割り当てられるようにすることができます。イベントを取得するときには、イベントを生成したデバイス オブジェクトではなく、イベントに関連付けられているアクションによってイベントを識別します。