ネタ元:じんわりたのしい
えぴさんが XNA で Xbox 360 以外のコントローラーが使えるの?っという質問がありました。XNA では基本的に Xbox 360 のコントローラーしか対応しないことになっているのですが、Windows 限定であれば、他のコントローラーを使う方法があります。
今回のサンプルでは XNA のライブラリではなく、Managed DirectX から DirectInput の DLL を参照してジョイスティックの情報を取得してみました。
Managed DirectX のランタイムは DirectX Web インストーラーからインストールできますし、Windows Vista ならはじめからインストールされているので特に追加インストールは必要ないかと思います。
XNA のプロジェクトから DirectInput を使うには、参照設定から「Microsoft.DirectX.DirectInput」と「System.Windows.Forms」を追加してください。名前空間も必要であれば追記してください。
サンプルプログラムでは「using MDXDI = Microsoft.DirectX.DirectInput;」と追記して DirectInput のクラスや列挙型にアクセスしやすくしています。
コードの方はプロジェクトおいておきますのでダウンロードして参照してみてください。
デバッグ実行すると「LoaderLockが検出されました。」という例外が発生する場合がありますが、特に無視しても問題ないのでそのまま実行してください。(この例外に関しては MSDN フォーラムで NyaRuRu さんが詳しく書いています。また、Managed DirectX 特有の現象です)
この例外が邪魔な場合は Visual Studio の例外チェックから「LoaderLock」を外してください。
【環境】
- XNA Game Studio 2.0
- Visual Studio 2005
- Managed DirectX 1.1
- Windows XP, Vista
【実行ファイル】
【プロジェクト】