3

Microsoft DirectX を使用してゲームパッドにアクセスしています。これは、次のような USB ゲームパッドです。

ここに画像の説明を入力

ボタンが押されたタイミングと、軸のアナログ値を知ることができました...

問題は、アナログ ボタンが押されたとき (赤いライトが点灯) を知る方法があるかどうかです。

それは可能ですか?どのように?

4

1 に答える 1

2

プロジェクトにはSlimDXまたはSharpDXをお勧めします。それらは DirectX API をサポートし、非常にシンプルです。

スリムDX :

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;
}
于 2013-04-24T13:11:21.120 に答える