DirectInput

DirectInputは、マイクロソフトが開発したDirectXの一部であり、主にゲームにおけるユーザーからの入力を処理するためのAPIです。マウス、キーボード、ジョイスティックゲームコントローラーなど、様々な入力デバイスからの情報を収集し、アプリケーションに提供します。

DirectInputの主な機能

入力情報の収集: 様々な入力機器からユーザーの操作情報を取得します。
アクションマッピング: 入力デバイスのボタンや座標を、ゲーム内の特定のアクションに割り当てることができます。これにより、異なるデバイスでも同じ操作感を実現できます。
フォースフィードバック: フォースフィードバックデバイスからの入力を処理し、ゲーム内の状況に応じて振動などの触覚フィードバックをユーザーに提供します。

DirectInputの歴史

当初、DirectInputはジョイスティックのみをサポートしていましたが、DirectX 3.0でキーボードとマウスのサポートが追加されました。DirectX 5.0ではジョイスティックのサポートが大幅に強化され、フォースフィードバックに対応しました。また、DirectX 7.0では複数のマウスの接続が可能になりましたが、この機能は後のWindows XPでは動作しなくなりました。

DirectX 8.0ではアクションマッピングなど、様々な種類のデバイスを広くサポートする最後のメジャーアップデートとなりました。

マイクロソフトは当初DirectInputを全ての入力機器を扱う方法として推奨していましたが、その後、この方針を撤回しました。現在ではキーボードとマウスの制御にはDirectInputではなくWindowsのメッセージループを、Xbox 360コントローラーにはXInputを使うことを推奨しています。

これは、Windows XPでRaw Input APIが導入され、DirectInputがWM_INPUTデータを読み取るために追加のスレッドを使用するため、オーバーヘッドが増加するためです。キーボードやマウスのデータ取得においては、DirectInputを使用するメリットは少ないです。高解像度のマウス移動データが必要ない場合はWM_MOUSEMOVEを、高精度の操作が必要な場合はWM_INPUTを使うことが推奨されています。

XInputの導入

マイクロソフトXbox 360の発売に合わせて、XInputという新しい入力ライブラリを導入しました。XInputはDirectInputよりもプログラミングが簡単で、Xbox 360コントローラーの機能を最大限に活用できます。XInputはDirectX 9以降で利用可能です。

DirectInputとXInputの比較

DirectInputはDirectX 8から大きな変更がなく、XInputはDirectX 9で導入されたため、2つのAPIの間にはいくつかの違いがあります。

DirectInput
様々な種類のデバイスに対応。
キーボード、マウス、ジョイスティック、ゲームパッドなど、多様な入力デバイスをサポート。
最大アナログ8軸、128ボタン、フルレンジPOV(ハットスイッチ)をサポート。
古いデバイスもサポート。
最大同時接続数に制限なし。
XInput
主にXbox 360コントローラーを対象としたAPI。
最大同時接続数4台。
キーボード、マウスは非サポート。
アナログ4軸、10ボタン、デジタル8方向のみをサポート。
WindowsストアアプリではXInput 1.4のみ使用可能。

Xbox 360コントローラーにおけるDirectInputの制限

Xbox 360コントローラーとマイクロソフトの標準ドライバーをDirectInputで使用すると、以下の制限があります。

左右のトリガーは独立したアナログ軸として機能せず、単一のデジタル方向として動作する。
振動機能が利用できない。
ヘッドセットデバイスの確認ができない。

これらの制限は、マイクロソフトXbox 360コントローラーのドライバーを意図的に制限しているためです。XBCDドライバーを使用すると、振動機能や独立したトリガーをDirectInput経由で利用できます。

DirectInputの継続利用

DirectInputは過去の技術と見なされつつありますが、コミュニティベースでの試みとして、フライトシミュレーターでフォースフィードバックAPI対応ジョイスティックを使用可能にするXPForceプロジェクトが存在しています。


まとめ

DirectInputは、かつては主要な入力APIでしたが、現在はキーボードとマウスの入力にはWindowsのメッセージループを、Xbox 360コントローラーにはXInputを使うことが推奨されています。DirectInputは幅広いデバイスをサポートする利点がありますが、XInputはプログラミングの容易さやXbox 360コントローラーの機能を最大限に活用できるという利点があります。どちらのAPIを選択するかは、開発するアプリケーションの種類や対象デバイスによって異なります。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。