2013-04-24 4 views
3

Я использую Microsoft DirectX для доступа к своему геймпаду. Это USB-геймпад, как это:Джойстик + C#: Аналоговая кнопка

enter image description here

я мог бы получить доступ к знаниям при нажатии кнопок, а также аналоговые значения оси ...

Дело в том, есть ли способ узнать, когда нажата аналоговая кнопка (красный индикатор включен).

Возможно ли это? Как?

+0

Что вы имеете в виду: * аналог кнопки *, вы говорите о триггерах L2/R2, или вы со ссылкой на чувствительные кнопки лица давления? – Nolonar

+0

Я имею в виду кнопку, которая позволяет потенциометры для оси x, y, z. Тот, который включает красный свет ... –

+2

Нет, это, вероятно, невозможно, так как его кнопка не вводится, ее кнопка изменяет способ работы оборудования. –

ответ

2

Я бы порекомендовал SlimDX или SharpDX для вашего проекта. Они поддерживают DirectX API и очень просты.

SlimDX:

using SlimDX.DirectInput; 

Создать новую DirectInput-Object:

DirectInput input = new DirectInput(); 

Затем GameController Класс для Handling:

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

Это хорошая обертка, и я предпочитаю некоторые функции Framework. Для Red Light я предполагаю, что он будет содержать в joystick.GetObjects(). – Smartis

+0

Спасибо @Smartis Я проверю джойстик.GetObjects() для этого ... Мне нужно знать, включен ли аналог, чтобы узнать, доступна ли ось z ... –

Смежные вопросы