如何在C#应用程序中使用xbox one控制器

时间:2016-08-23 19:52:42

标签: c# sharpdx

在C#中已经存在大量使用xbox 360控制器的信息,但我没有找到xbox one控制器的信息。

我需要非常基本的操作,特别是操纵杆和触发器值。

大多数在线信息都是针对C ++应用程序的,但我不想尝试编写自定义库,而是想使用SharpDX之类的东西。如何在我的应用程序中使用它?

注意:我发布此信息是为了分享我找到的信息,以及为自己记录我的调查结果。我喜欢听其他方法将控制器输入到.NET应用程序中。

1 个答案:

答案 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社区版)。

Adding sharpdx with package manager inside VS2015

然后只需在Visual Studio底部显示的Package Manager控制台中键入:Install-Package SharpDX

Install 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应用程序中的人!