ダイレクト入力
DirectInputは、アメリカのMicrosoft社が開発したレガシー[ 1 ]アプリケーションプログラミングインターフェースで、マウス、キーボード、ゲームパッドなどのデバイスを介してユーザー入力を収集します。また、アクションマッピングシステムも提供しており、ユーザーはゲーム内の特定のアクションを入力デバイスのボタンや軸に割り当てることができます。さらに、触覚フィードバック/フォースフィードバック(入出力)デバイスも処理します。Microsoftは、Xbox 360コントローラー専用のXInputという入力ライブラリも導入しました。
DirectInput は、最大 128 個のボタン、8 つの軸、4 つの視点ハットをサポートします。
DirectInput と XInput は、通常の Win32 入力イベントに比べて次のような利点があります。
- アプリケーションがバックグラウンドにあるときでも、入力デバイスからデータを取得できるようになります。
- あらゆる種類の入力デバイスと触覚フィードバックを完全にサポートします。
- アクションマッピングを通じて、アプリケーションはどのような種類のデバイスが入力を生成したかを知らなくても入力データを取得できる。
DirectInputはDirectXライブラリの一部ですが、DirectX 8(2001~2002年)以降、大幅な改訂は行われていません。Microsoftは、新しいアプリケーションでは、キーボードとマウスの入力にDirectInputではなくWindowsメッセージループを使用することを推奨しています(Meltdown 2005のスライドショー[ 2 ]に示されているように)。また、DirectInputやXInputなどの従来のAPIではなくGameInputを使用することを推奨しています。[ 3 ]
歴史
DirectXはバージョン1.0(1995年)からDirectInputをサポートしていました。当初はジョイスティックのみをサポートしており、マウスとキーボードのモジュールは標準のWin32 APIへのラッパーを提供するにとどまっていました。DirectXバージョン3.0(1996年)ではキーボードとマウスのサポートが追加され、ジョイスティックのサポートも改善されました。DirectX 5.0(1997年)ではジョイスティックのサポートが大幅に改善され、触覚フィードバックの追加、ボタン数の増加、基盤となるデバイスドライバーモデルの変更、COMベースのAPIの組み込みなどが行われました。マウスのサポートによってボタン数も4個から8個に増加しました。 DirectX 7.0 (1999- ) では、DirectInput により、個別のマウスを個別のジョイスティックのように認識するという長い間約束されていた機能が追加されましたが、この機能は、2010 年現在では Windows 98/Me と DirectX 9 では動作するものの、後にリリースされたWindows XPでは動作しませんでした。大きな変更が加えられた最後のバージョンである DirectX 8.0 (2000) には、アクション マッピングと、さまざまな種類のデバイスに対するより広範なサポートが含まれていました。
マイクロソフトは当初、DirectInputで全ての入力を処理することを想定していたが、これはうまくいかなかった。2011年現在、マイクロソフトはキーボードやマウスでのDirectInputの使用を推奨しておらず、Xbox 360コントローラーには新しいXInputの使用を推奨し始めている。[ 4 ] Windows Vista、Windows 7 、およびそれ以降のバージョンのWindowsでは、組み込みのアクションマッピングUIは削除されている。[ 5 ] DirectInputはWindowsストアアプリでは利用できない。
XInput
XInput [ 6 ]は、より新しいが現在ではレガシー[ 7 ] となっている「次世代」コントローラー向けAPIであり、2005年12月にXbox 360の発売と同時に導入されました。この仕様は、Windows XP SP1以降のオペレーティングシステムでXbox 360コントローラーをサポートするもので、MicrosoftはDirectInputよりもプログラミングが容易で、セットアップも少ないと説明しています。XInputはDirectXバージョン9以降と互換性があります。
Xbox 360 コントローラーのサポート
Xbox 360コントローラーは、デフォルトのMicrosoftドライバーでは、XInputと比較して、DirectInputで次のような制限があります。[ 8 ]
- ボタンの精度が低いため、コントローラーのリマッピングに対応していないゲームでは問題が発生する可能性があります。
- 左トリガーと右トリガーは、独立したアナログ軸またはボタンとしてではなく、トリガー間の符号付き差を表す単一の軸として機能します。
- 振動効果は動作しません。
- ヘッドセットデバイスのクエリは動作しません。Windows 8の一部としてXInput 1.4が導入され、Xboxヘッドセットのサポートが導入されました。[ 9 ]
MSDNによると、「DirectInputにおける左右のトリガーの組み合わせは仕様です。ゲームでは常に、ユーザーがデバイスを操作していないときはDirectInputデバイスの軸が中央にあると想定しています。しかし、Xbox 360コントローラーは、トリガーが押されていないときは中央ではなく最小値を記録するように設計されています。」MSDNは、トリガーを組み合わせて、一方のトリガーを正の方向に、もう一方のトリガーを負の方向に設定し、ユーザー操作がないことがDirectInputに「コントロール」が中央にあることを示すという「解決策」を提案しました。[ 10 ]
しかし、上記は、デュアルアナログスティック付きゲームパッドやレーシングホイールコントローラーセットなど、多くのDirectInputコントローラーが既にトリガーとペダルを個別にマッピングしているという事実を無視しています。さらに、多くのDirectInputデバイスは振動効果も備えています。少なくとも1つのサードパーティドライバー、XBCDは、XInputドライバーが持つDirectInputを介して、Xbox 360コントローラーに振動サポート、デッドゾーン、(オプションで)独立したアナログ/デジタルトリガーを提供します。[ 11 ]これは、MicrosoftのXbox 360コントローラードライバーが、 DirectInputとXInput APIの違いによるものではなく、意図的に弱いDirectInputサポートを提供していることを示唆しています。一方、XInputを使用するXbox 360コントローラーは、 DirectInput経由でサポートされるより幅広い効果とは対照的に、振動モーターの非常に基本的な制御しかサポートしていません[ 12 ] [ 13 ] 。 [ 14 ]
参考文献
- ^ "DirectInput" . 2011年9月10日.
- ^ 「Meltdown 2005 スライドショー (.zip)」 2015年5月21日時点のオリジナルよりアーカイブ。2012年11月13日閲覧。
{{cite web}}: CS1 maint: bot: 元のURLステータス不明(リンク) - ^ 「GameInputの概要」、2024年3月28日、p. GameInputの紹介、「はじめに」。GameInput
は、すべてのMicrosoftプラットフォーム(以前のバージョンのWindowsを含む)をサポートし、従来のAPIよりも優れたパフォーマンスを提供するため、対象プラットフォームに関係なく、すべての新規コードに推奨されるAPIです。
- ^ 「高精細マウス動作の活用」 MSDN 、 Microsoft 、 2009年1月25日閲覧。
- ^ 「Windows VistaのDirectInput ConfigureDevices」 2008年12月27日. 2008年12月27日時点のオリジナルよりアーカイブ。 2012年11月13日閲覧。
- ^ 「XInput と DirectInput の機能の比較 - Win32 アプリ | Microsoft Docs」。2023 年 10 月 25 日。
- ^ 「GameInputの概要」。2024年3月28日。
- ^ 「XInput と DirectInput の機能の比較 - Win32 アプリ | Microsoft Docs」。2023 年 10 月 25 日。
- ^ "XInputGetAudioDeviceIds 関数" . MSDN . 2013年12月10日閲覧。
- ^ 「XInput と DirectInput」 . Microsoft. 2012年9月17日. 2012年12月27日閲覧。
- ^ 「Windows VistaのDirectInput ConfigureDevices」 。 2011年4月25日時点のオリジナルよりアーカイブ。2020年7月17日閲覧。
- ^ 「Gamepad - Rumbler Control」 . Free60プロジェクト. 2009年3月13日時点のオリジナルよりアーカイブ。2009年1月25日閲覧。
- ^ "XINPUT_VIBRATION" . Msdn.microsoft.com . 2009年1月25日閲覧。
- ^ "DIEFFECT" . MSDN . Microsoft . 2009年1月25日閲覧。