DirectInput の概要
DirectInput の概要
Microsoft® DirectInput® は、マウス、キーボード、ジョイスティック、およびその他のゲーム コントローラの入力デバイスに加え、フォース フィードバック (入出力) デバイスもサポートするアプリケーション プログラミング インターフェイス (API) である。
このトピックでは、DirectInput の機能とアプリケーションでの設定方法について、簡単な概要を説明する。以下の説明が含まれる。
- DirectInput のパワー
- DirectInput の基礎知識
DirectInput の機能の総合的な説明については、「DirectInput について」を参照すること。
DirectInput API の使い方をステップ バイ ステップ方式で説明するガイドについては、以下のトピックを参照すること。
DirectInput のパワー
DirectInput は、Microsoft Win32® API がサポートしていないデバイスに新しいサービスを提供することに加え、Microsoft Windows® メッセージに依存せずにハードウェア ドライバと直接通信することにより、入力データへのアクセスを高速化している。
DirectInput を使うと、アプリケーションがバックグラウンドにある場合でも、入力デバイスに対するアクセス権を取得できる。また、フォース フィードバックのほか、あらゆるタイプの入力デバイスを完全にサポートしている。
アクション マップを介して、アプリケーションは、データがどんなデバイスで生成されたかを知らなくても、入力データを取得できる。
DirectInput の拡張サービスと性能の改善により、DirectInput は、Windows で動作するゲーム、シミュレーション、およびその他のリアルタイム対話型アプリケーションに対する有用なツールとなっている。
DirectInput では、テキスト入力にキーボードを使ったり、移動にマウスを使うアプリケーションが有利になることはない。詳細については、「Windows との相互作用」を参照すること。
DirectInput の基礎知識
ここでは、単純なアプリケーションでの DirectInput の設定方法と使い方の概要を説明する。
これらの手順の詳細と例については、「DirectInput の使い方」および「DirectInput C/C++ チュートリアル」を参照すること。
注 DirectInput を理解するには、以下の用語を理解する必要がある。
- DirectInput オブジェクト :ルートの DirectInput インターフェイス。
- デバイス :キーボード、マウス、ジョイスティック、またはその他の入力デバイス。
- DirectInputDevice オブジェクト :キーボード、マウス、ジョイスティック、またはその他の入力デバイスを表すコード。
- デバイス オブジェクト :DirectInput デバイス オブジェクト上のキー、ボタン、トリガなどを表すコード。デバイス オブジェクト インスタンスとも呼ぶ。
以下の手順は、アプリケーションにおいて、どのデバイス オブジェクト (ボタン、軸など) がデータ項目を生成したかを確認するための DirectInput の単純な実装を示している。
- DirectInput オブジェクトを作成する。このオブジェクトのメソッドを使ってデバイスを列挙し、DirectInput デバイス オブジェクトを作成する。
- デバイスを列挙する。システム マウスまたはキーボードのみを使う場合は、この手順は必ずしも必要ではない。ユーザーのシステム上で他にどんな入力デバイスが使えるかを確認するには、DirectInput にデバイスを列挙させる。DirectInput は、設定基準と一致するデバイスを見つけるたびに、その能力をチェックできる。また、そのデバイスを表す DirectInput デバイス オブジェクトを作成するための固有の識別子も取得する。
- 使うデバイスごとに DirectInputDevice オブジェクトを作成する。これには、列挙中に取得された固有の識別子が必要になる。システム マウスまたはキーボードについては、標準のグローバル一意識別子 (GUID) を使える。
- デバイスを設定する。デバイスごとに、まず協調レベルを設定し、他のアプリケーションやシステムとそのデバイスを共有する方法を指定する。また、データ パケット内で、ボタンや軸などそのデバイス オブジェクトを識別するためのデータ形式を設定する。バッファリング データを取得する場合 (ステートではなくイベントを取得する場合) は、バッファ サイズも設定する必要がある。オプションとして、この段階でデバイスに関する情報を取得し、アプリケーションの動作をそれに応じて調整する。また、ジョイスティックの軸が返す値の範囲などのプロパテイを設定することもできる。
- デバイスを取得する。この段階で、DirectInput に対し、デバイスからデータを受け取る準備ができたことを通知する。
- データを取得する。一定の間隔で、通常はメッセージ ループまたはレンダリング ループを 1 回繰り返すたびに、各デバイスの現在の状態か前回取得後に発生したイベントの記録のいずれかを取得する。必要に応じて、イベントが発生したら DirectInput から通知させることもできる。
- データを処理する。アプリケーションは、ボタンや軸の状態か、キーが押されているか離されているかなどのイベントのいずれかに反応できる。
- DirectInput を終了する。終了する前に、アプリケーションはすべてのデバイスの取得を解除して解放し、DirectInput オブジェクトを解放しなければならない。
DirectInput を実装する方法は、これだけではない。現在使われているか、または今後使われる多様な入力デバイスを活用し、ユーザーの環境設定を簡素化するために、アクション マップを使える。
デバイスにアクション マップを設定することにより、アプリケーションの各アクションに使うデバイス オブジェクトを DirectInput に決めさせることができる。たとえば、レーシング ゲームで、スロットルが常に y 軸によって制御されるように指定する代わりに、AXIS_THROTTLE というアクションを作成し、デバイス上で最も適切な軸に DirectInput がアクションを割り当てるようにできる。イベントを取得したときは、そのイベントを生成したデバイス オブジェクトではなく、そのイベントに関連付けられているアクションによってイベントを識別する。
詳細については、「アクション マップ」を参照すること。