내가 시작한 가장 쉬운 방법은 SharpDX를 사용하는 것이 었습니다. SharpDX website :
SharpDX는 DirectX API의 오픈 소스 관리 .NET 랩퍼입니다.
SharpDX is available on nuget이므로 Visual Studio에서 시작하는 것이 매우 간단합니다.
Visual Studio에서 Tools -> NuGet Package Manager -> Package Manager Console
(2015 커뮤니티 에디션 사용)으로 이동하십시오.
그럼 간단하게 입력 :
Install-Package SharpDX
를 비주얼 스튜디오의 하단에 표시되는 패키지 관리자 콘솔에.
비주얼 스튜디오 다운로드하고 솔루션에 추가합니다. 이제 코드를 살펴보십시오.
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 응용 프로그램에 X 박스 하나의 컨트롤러 입력을 추가하고자하는 미래의 누군가에게 도움이 될 것입니다!
+1 가벼운 대안은 https://github.com/speps/XInputDotNet이며, 데드 존 (deadzones)은 https://msdn.microsoft.com/en-us/library/windows/desktop/ 대신 데드 존을 사용하는 것이 좋습니다. ee417001 (v = vs.85) .aspx # dead_zone – Aybe
추가 정보 주셔서 감사합니다! @ 아마 XInputDotNet을 살펴 봐야 할 것입니다! 최대 폴링시 매 2 초마다 가비지 수집기를 시작했기 때문에 컨트롤러에 대한 폴링 속도를 약 100mhz (지연 시간 10ms)로 줄여야했습니다. 10ms 폴링 율에서 눈에 띄는 차이는 없습니다. –
당신을 환영합니다 !!! – Aybe