2016-08-23 7 views
0

xbox 360コントローラをC#で使用するための情報がすでにたくさんありますが、Xboxの1つのコントローラについてはそれほど多くの情報が見つかりませんでした。C#アプリケーションでxbox one controllerを使用する方法

私は非常に基本的な操作、特にジョイスティックとトリガーの値が必要です。

オンラインの情報の大半はC++アプリケーション用ですが、カスタムライブラリを作成するのではなく、SharpDXのようなものを使用したいと思います。アプリケーションでこれを使用するにはどうすればよいですか?

注:私が見つけた情報を共有し、自分の発見を文書化するために、これを投稿しています。私は、しかし、コントローラの入力を.NETアプリケーションに取得する他の方法を聞いてみたいと思います。

答えて

5

私が最初に見つけた最も簡単な方法は、SharpDXを使用することでした。 SharpDX website

SharpDXは、DirectX APIのオープンソースの管理.NETラッパーです。

SharpDX is available on nugetだから、Visual Studioの中で始めるのはとても簡単です。

開始するには、Visual StudioのTools -> NuGet Package Manager -> Package Manager Console(2015コミュニティ版を使用しています)にアクセスしてください。

Adding sharpdx with package manager inside VS2015

そして、単に入力します。Install-Package SharpDXビジュアル・スタジオの下部に表示されるパッケージマネージャコンソールに。

Install SharpDX

ビジュアル・スタジオは、ダウンロードして、あなたのソリューションに追加します。今すぐコードに。

私はxboxコントローラからの入力を望んでいたので、プログラムの先頭に
using SharpDX.XInputを追加するだけです。

、すべての値を取得するためのコードは非常に簡単です:コントローラ上のジョイスティックが完全にゼロに戻らないため

class XInputController 
{ 
    Controller controller; 
    Gamepad gamepad; 
    public bool connected = false; 
    public int deadband = 2500; 
    public Point leftThumb, rightThumb = new Point(0,0); 
    public float leftTrigger, rightTrigger; 

    public XInputController() 
    { 
     controller = new Controller(UserIndex.One); 
     connected = controller.IsConnected; 
    } 

    // Call this method to update all class values 
    public void Update() 
    { 
     if(!connected) 
      return; 

     gamepad = controller.GetState().Gamepad; 

     leftThumb.x = (Math.Abs((float)gamepad.LeftThumbX) < deadband) ? 0 : (float)gamepad.LeftThumbX/short.MinValue * -100; 
     leftThumb.y = (Math.Abs((float)gamepad.LeftThumbY) < deadband) ? 0 : (float)gamepad.LeftThumbY/short.MaxValue * 100; 
     rightThumb.y = (Math.Abs((float)gamepad.RightThumbX) < deadband) ? 0 : (float)gamepad.RightThumbX/short.MaxValue * 100; 
     rightThumb.x = (Math.Abs((float)gamepad.RightThumbY) < deadband) ? 0 : (float)gamepad.RightThumbY/short.MaxValue * 100; 

     leftTrigger = gamepad.LeftTrigger; 
     rightTrigger = gamepad.RightTrigger; 
    } 
} 

これはデッドバンドを作成します。両方のスティック入力が一致するように、左のX軸を反転します。 Yの正のX正が右側にあり、最高です:

leftThumb.x = (Math.Abs((float)gamepad.LeftThumbX) < deadband) ? 0 : (float)gamepad.LeftThumbX/short.MinValue * -100; 
leftThumb.y = (Math.Abs((float)gamepad.LeftThumbY) < deadband) ? 0 : (float)gamepad.LeftThumbY/short.MaxValue * 100; 
rightThumb.y = (Math.Abs((float)gamepad.RightThumbX) < deadband) ? 0 : (float)gamepad.RightThumbX/short.MaxValue * 100; 
rightThumb.x = (Math.Abs((float)gamepad.RightThumbY) < deadband) ? 0 : (float)gamepad.RightThumbY/short.MaxValue * 100; 

がうまくいけば、これは彼らの.NETアプリケーションへのXboxのコントローラの入力を追加するために探して、将来的に誰かに役立ちます!

+1

+1軽量の代替手段はhttps://github.com/speps/XInputDotNetです。デッドゾーンの場合は、代わりにこれを代わりに使用することをお勧めします。https://msdn.microsoft.com/en-us/library/windows/desktop/ ee417001(v = vs.85).aspx#dead_zone – Aybe

+0

追加情報ありがとう! @Aybe私はXInputDotNetを一見する必要があります!最大ポーリングで2秒ごとにガベージコレクタを起動していたので、コントローラへのポーリングレートを約100mhz(10msの遅延)に減らさなければなりませんでした。 10msのポーリングレートで顕著な違いはありません。 –

+0

歓迎!!! – Aybe

関連する問題