在C#中已经存在大量使用xbox 360控制器的信息,但我没有找到xbox one控制器的信息。
我需要非常基本的操作,特别是操纵杆和触发器值。
大多数在线信息都是针对C ++应用程序的,但我不想尝试编写自定义库,而是想使用SharpDX之类的东西。如何在我的应用程序中使用它?
注意:我发布此信息是为了分享我找到的信息,以及为自己记录我的调查结果。我喜欢听其他方法将控制器输入到.NET应用程序中。
答案 0 :(得分:8)
我发现开始的最简单方法是使用SharpDX。来自SharpDX website:
SharpDX是DirectX API的开源托管.NET包装器。
SharpDX is available on nuget,因此在Visual Studios中开始使用它非常简单。
要开始使用,请转到Visual Studio内的Tools -> NuGet Package Manager -> Package Manager Console
(我正在使用2015社区版)。
然后只需在Visual Studio底部显示的Package Manager控制台中键入:Install-Package SharpDX
。
Visual Studio将下载并将其添加到您的解决方案中。现在进入代码。
由于我想从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;
希望这将有助于将来寻求将xbox one控制器输入添加到其.NET应用程序中的人!