如何在 C# 应用程序中使用 xbox one 控制器
How to use xbox one controller in C# application
已经有大量关于在 C# 中使用 xbox 360 控制器的信息,但我没有找到那么多关于 xbox one 控制器的信息。
我需要非常基本的操作,特别是操纵杆和触发器值。
大多数在线信息都是针对 C++ 应用程序的,但我不想尝试编写自定义库,而是想使用类似 SharpDX 的东西。我如何在我的应用程序中使用它?
注意:我发布这篇文章是为了分享我发现的信息,并为我自己记录我的发现。不过,我很想听听其他将控制器输入到 .NET 应用程序的方法。
我发现最简单的入门方法是使用 SharpDX。来自 SharpDX website:
SharpDX is an open-source managed .NET wrapper of the DirectX API.
SharpDX is available on nuget,因此在 Visual Studios 中开始使用它非常简单。
要开始,请转到 Visual Studios 中的 Tools -> NuGet Package Manager -> Package Manager Console
(我使用的是 2015 社区版)。
然后只需在出现在 Visual Studios 底部的程序包管理器控制台中键入:Install-Package SharpDX
。
然后 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;
}
}
这会产生死区,因为控制器上的操纵杆永远不会完全 return 归零。它还反转左 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 应用程序的人有所帮助!
已经有大量关于在 C# 中使用 xbox 360 控制器的信息,但我没有找到那么多关于 xbox one 控制器的信息。
我需要非常基本的操作,特别是操纵杆和触发器值。
大多数在线信息都是针对 C++ 应用程序的,但我不想尝试编写自定义库,而是想使用类似 SharpDX 的东西。我如何在我的应用程序中使用它?
注意:我发布这篇文章是为了分享我发现的信息,并为我自己记录我的发现。不过,我很想听听其他将控制器输入到 .NET 应用程序的方法。
我发现最简单的入门方法是使用 SharpDX。来自 SharpDX website:
SharpDX is an open-source managed .NET wrapper of the DirectX API.
SharpDX is available on nuget,因此在 Visual Studios 中开始使用它非常简单。
要开始,请转到 Visual Studios 中的 Tools -> NuGet Package Manager -> Package Manager Console
(我使用的是 2015 社区版)。
然后只需在出现在 Visual Studios 底部的程序包管理器控制台中键入:Install-Package SharpDX
。
然后 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;
}
}
这会产生死区,因为控制器上的操纵杆永远不会完全 return 归零。它还反转左 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 应用程序的人有所帮助!