gpt4 book ai didi

c# - 如何在 C# 应用程序中使用 xbox one Controller

转载 作者:太空宇宙 更新时间:2023-11-03 17:49:17 24 4
gpt4 key购买 nike

已经有大量关于在 C# 中使用 xbox 360 Controller 的信息,但我没有找到那么多关于 xbox one Controller 的信息。

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

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

注意:我发布这篇文章是为了分享我发现的信息,并为我自己记录我的发现。不过,我很想听听其他将 Controller 输入到 .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 社区版)。

Adding sharpdx with package manager inside VS2015

然后只需在出现在 Visual Studios 底部的包管理器控制台中键入:Install-Package SharpDX

Install SharpDX

然后 Visual Studios 将下载它并将其添加到您的解决方案中。现在进入代码。

因为我想从 xbox Controller 输入,我们只需要添加:
使用 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;
}
}

这会产生死区,因为 Controller 上的操纵杆永远不会完全归零。它还反转左 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 Controller 输入添加到他们的 .NET 应用程序的人有所帮助!

关于c# - 如何在 C# 应用程序中使用 xbox one Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39109609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com