私が最初に見つけた最も簡単な方法は、SharpDXを使用することでした。 SharpDX website:
SharpDXは、DirectX APIのオープンソースの管理.NETラッパーです。
SharpDX is available on nugetだから、Visual Studioの中で始めるのはとても簡単です。
開始するには、Visual StudioのTools -> NuGet Package Manager -> Package Manager Console
(2015コミュニティ版を使用しています)にアクセスしてください。
そして、単に入力します。Install-Package 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軽量の代替手段はhttps://github.com/speps/XInputDotNetです。デッドゾーンの場合は、代わりにこれを代わりに使用することをお勧めします。https://msdn.microsoft.com/en-us/library/windows/desktop/ ee417001(v = vs.85).aspx#dead_zone – Aybe
追加情報ありがとう! @Aybe私はXInputDotNetを一見する必要があります!最大ポーリングで2秒ごとにガベージコレクタを起動していたので、コントローラへのポーリングレートを約100mhz(10msの遅延)に減らさなければなりませんでした。 10msのポーリングレートで顕著な違いはありません。 –
歓迎!!! – Aybe