我发现最简单的入门方法是使用 SharpDX。来自夏普DX网站 http://sharpdx.org/:
SharpDX 是 DirectX API 的开源托管 .NET 包装器。
SharpDX 可在 nuget 上使用 https://www.nuget.org/packages/SharpDX/,因此在 Visual Studio 中开始使用它非常简单。
要开始使用,请访问Tools -> NuGet Package Manager -> Package Manager Console
在 Visual Studios 内部(我使用的是 2015 社区版)。
然后只需输入:Install-Package SharpDX
进入出现在 Visual Studios 底部的包管理器控制台。
然后 Visual Studios 将下载并将其添加到您的解决方案中。现在来看代码。
因为我想要来自 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 One 控制器输入的人有所帮助!