2013-04-24 4 views
3

내 게임 패드에 액세스하려면 Microsoft DirectX를 사용하고 있습니다.조이스틱 + C# : 아날로그 단추

enter image description here

가 내가 버튼을 누를 때와 축의 또한 아날로그 값 때 알고에 대한 액세스를 얻을 수

...

것은이 존재하는 경우 : 이것은이 하나의 같은 USB 게임 패드입니다 아날로그 버튼을 눌렀을 때 알 수있는 방법입니다 (빨간색 표시등이 켜짐).

그럴 수 있습니까? 방법?

+0

당신은 무엇을 의미합니까 : 당신은 L2/R2가하거나 압력에 민감한 얼굴 버튼을 참조하는 트리거에 대해 * 아날로그 버튼 * 말을하는거야? – Nolonar

+0

x, y, z 축을위한 전위차계를 가능하게하는 버튼을 의미합니다. 빨간불을 켭니다. –

+2

아니요, 입력 버튼이 아니기 때문에 가능하지 않습니다. 입력 버튼이 하드웨어 작동 방식을 변경합니다. –

답변

2

프로젝트에 SlimDX 또는 SharpDX을 권하고 싶습니다. DirectX API를 지원하며 매우 간단합니다.

SlimDX :

using SlimDX.DirectInput; 

새로운 DirectInput의 객체 생성 : 취급에 대한 다음

DirectInput input = new DirectInput(); 

GameController 클래스 :

public class GameController 
{ 
    private Joystick joystick; 
    private JoystickState state = new JoystickState(); 
} 

을 그리고 다음과 같이 사용 :

public GameController(DirectInput directInput, Game game, int number) 
{ 
    // Search for Device 
    var devices = directInput.GetDevices(DeviceClass.GameController, DeviceEnumerationFlags.AttachedOnly); 
    if (devices.Count == 0 || devices[number] == null) 
    { 
     // No Device 
     return; 
    } 

    // Create Gamepad 
    joystick = new Joystick(directInput, devices[number].InstanceGuid); 
    joystick.SetCooperativeLevel(game.Window.Handle, CooperativeLevel.Exclusive | CooperativeLevel.Foreground); 

    // Set Axis Range for the Analog Sticks between -1000 and 1000 
    foreach (DeviceObjectInstance deviceObject in joystick.GetObjects()) 
    { 
     if ((deviceObject.ObjectType & ObjectDeviceType.Axis) != 0) 
      joystick.GetObjectPropertiesById((int)deviceObject.ObjectType).SetRange(-1000, 1000); 
    } 
    joystick.Acquire(); 
} 

마지막 방법에 따라 국가를 얻을 :

public JoystickState GetState() 
{ 
    if (joystick.Acquire().IsFailure || joystick.Poll().IsFailure) 
    { 
     state = new JoystickState(); 
     return state; 
    } 

    state = joystick.GetCurrentState(); 

    return state; 
} 
+0

네, 구조상 비슷한 것을 사용하고 있습니다. Microsoft Direct X를 사용하는 이유 ... SLIM/SHARP가 더 좋은 이유는 무엇입니까? 게임 패드의 붉은 빛 상태에 대한 지식을 얻을 수 있었습니까? –

+0

좋은 래퍼이고 프레임 워크의 일부 기능을 선호합니다. 레드 라이트 들어 조이스틱에 포함됩니다 것이 좋습니다 .GetObjects(). – Smartis

+0

고마워요 @ 스 마트리스 나는 그걸 위해 조이스틱을 확인하겠습니다 .GetObjects() ... 만약 z 축이 사용 가능한지 알기 위해 아날로그가 켜져 있는지 알아야합니다 ... –