DirectInput

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

DirectInputマウスキーボードジョイスティックゲームコントローラ等を介してユーザーからの入力情報を収集するためのAPIである。DirectInputはまたゲーム中の入力装置のボタンや座標を特定のアクションに割り当てるアクションマッピングのシステムを提供する。さらにフォースフィードバック装置の入出力を扱う。マイクロソフトDirectX 9Xbox 360用コントローラーのためのXInputという新しい入力ライブラリを導入した。

DirectInputとXInputは通常のWin32アプリケーションにも利点がある。

  • アプリケーションはバックグラウンドでの動作中でも入力装置から情報を入手できる。
  • フォースフィードバックのような様々なタイプの入力装置を完全にサポートできる。
  • アクションマッピング機能によりアプリケーションはデータ生成にどのような種類の装置が必要であるかを知ることなく入力データを入手できる。

DirectInputはDirectXライブラリの一部であるが、DirectX 8から大きな変更がない。2005年のMeltdownでのプレゼンテーション[1]でマイクロソフトは、新しいアプリケーションはキーボードとマウスを制御するのにDirectInputではなくWindowsのメッセージループを活用して、Xbox 360のコントローラーでもDirectInputではなくXInputを使うように推奨した。

歴史[編集]

DirectInputはDirectXの一部であった。当初は実際はジョイスティックだけをサポートしており、マウスとキーボードの部分は標準Win32 APIの単なるラッパーであった。DirectXバージョン3.0よりキーボードとマウスがサポートされるようになり、ジョイスティックのサポートも改善した。DirectX 5.0ではジョイスティックのサポートを大幅に強化し、フォースフィードバックに対応し、ボタン数が増え、基盤となるデバイスドライバモデルが変更された。マウスでもボタン数が4から8に増えた。DirectX 7.0では長い間待望だった複数のマウスの接続が可能になり、ジョイスティックのように個別に操作できるようになったが、後にリリースされたWindows XPではこの機能が動作しなくなった(Windows 98/MEとDirectX 9の組み合わせでは引き続き動作していた)。DirectX 8.0はアクションマッピングや様々な異なる種類の装置を広くサポートする最後のメジャーバージョンアップとなった。

マイクロソフトは元々DirectInputを全ての入力装置を取り扱う方法として売り込んだが、現在ではこの方針は撤回されている。今ではマイクロソフトはDirectInputを使ってキーボードとマウスを制御することを推奨しておらず、Xbox 360コントローラー用の新しいXInputを推奨している。

XInput[編集]

XInputは次世代コントローラーのためのAPIであり、Xbox 360の発売と共に導入され、Xbox 360コントローラーの全ての機能がWindows XP SP1以上で利用できるようになった。XInputはDirectInputよりもプログラムが劇的に簡単になる利点がある。XInputはDirectX 9以上から利用できる。

DirectInputとXInputの比較[編集]

DirectInputはDirectX 8から大きな変更が無く、XInputは後のDirectX 9で導入され、2つのAPIの現状と将来には若干の混乱がある。現在はお互いにない特徴があり、そしていずれもDirectX 10で大きな変更はない。

Xbox 360用コントローラーとマイクロソフトのデフォルトのドライバでDirectInputを使う場合、XInputと比較して以下の制約がある。

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

MSDNによると「DirectInputの左右のトリガーの組み合わせは仕様である。ユーザーがデバイスを操作していないときはDirectInputのゲームはデバイスの軸が中心にあるものと常に想定する。しかしながらXbox 360用コントローラーは、トリガーが保持されていないときは、中心ではなく最低値が登録されるように設計している。」MSDNの『解決策』は、片方のトリガーをプラス方向に設定し、もう片方のトリガーをマイナス方向に設定するようにトリガーを組み合わせるというものであり、ユーザーは『コントロール』が中央にあることをDirectInputに示すような操作をしない。[2]

これはしかしながら、デュアルアナログスティックのあるゲームパッドやハンドルコントローラーなどのような様々なDirectInputコントローラーが既にトリガーやペダルに個々に割り当て済みであるという事実を無視していた。しかも多くのDirectInputデバイスには振動機能も搭載されていた。Xbox 360用コントローラーで振動機能をサポートし、デッドゾーンの検知や、(オプションとして)独立したトリガーをDirectInput経由で利用できる、XBCDというドライバが存在している。これはDirectInputとXInputのAPIの違いによるものというよりはむしろ、マイクロソフトが提供するXbox 360用コントローラーのドライバは意図的にDirectInputでの機能を制限していることを示している。

現在XInputのAPIはDirectInputにはない制約もある。

  • 次世代のコントローラーのみをサポートする。基本的にWindows用のドライバがあるXbox 360用のコントローラーに制限される。旧式のWindows用のコントローラーはサポートしていない。
  • 最大同時接続数4台。これはXboxからWindowsに持ち込まれた制約である。今のところ4つのコントローラーを必要とするPC用ゲームはまずないが、DirectInputにはこのような制限が無く、不合理な制限と考えられる。
  • キーボード、マウス及びマウス型デバイスの非サポート。これらのデバイスをDirectInputを使わないものとするマイクロソフトの推奨を反映しているが、DirectInputでこれらのデバイスを利用することは可能である。
  • 1コントローラーあたり、アナログ4軸、10ボタン、デジタル8方向のみをサポートする。対してDirectInputはアナログ8軸、128ボタン、フルレンジのPOV(ハットスイッチ)をサポートする。(XInputがサポートする軸とボタンの数はXbox 360用コントローラーと直接対応している)。

DirectInputがあらゆるコントローラーに対応しているのと比べ、XInputは現在のところXbox 360用のコントローラーしか対応していない。