2013-08-24 2 views
0

Я новичок в C# и Sharpdx. У меня проблема с кодом из пары дней, и я не понимаю, как это не работает! Это простая задача - получить значение одной оси джойстика и показать ее в текстовом поле в форме.Приобретение джойстика с SharpDX

Я сделал новый проект в Visual Studio 2010 express, и я сделал форму с кнопкой и текстовым полем, чтобы показать значение оси джойстика (ось X).

Первая часть кода, приведенная ниже, является примером для документации по sharpdx, вторая часть немного отличается.

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

Что-то не так, но я не знаю, что

private void button3_Click(object sender, EventArgs e) 
{ 
    // Initialize DirectInput 
    var directInput = new DirectInput(); 

    // Find a Joystick Guid 
    var joystickGuid = Guid.Empty; 

    foreach (var deviceInstance in directInput.GetDevices(DeviceType.Gamepad, DeviceEnumerationFlags.AllDevices)) 
    joystickGuid = deviceInstance.InstanceGuid; 

    // If Gamepad not found, look for a Joystick 
    if (joystickGuid == Guid.Empty) 
    foreach (var deviceInstance in directInput.GetDevices(DeviceType.Joystick, DeviceEnumerationFlags.AllDevices)) 
     joystickGuid = deviceInstance.InstanceGuid; 

    // If Joystick not found, throws an error 
    if (joystickGuid == Guid.Empty) 
    { 
     Console.WriteLine("No joystick/Gamepad found."); 
     Console.ReadKey(); 
     Environment.Exit(1); 
    } 

    // Instantiate the joystick e stato 
    Joystick joystick = new Joystick(directInput, joystickGuid); 
    JoystickState stato = new JoystickState(); 

    // specifico se relativo o assoluto 
    joystick.Properties.AxisMode = DeviceAxisMode.Absolute; 

    // effettuo un collegamento con il joystick 
    joystick.Acquire(); 

    // qui faccio una acquisizione dello stato che memorizzo 
    joystick.Poll(); 

    // effettuo una lettura dello stato 
    joystick.GetCurrentState(ref stato); 

    // stampo il valore dell'ordinata 
    textBox1.Text = stato.X.ToString(); 
} 

ответ

2

Я думаю, что проблема в том, что вы звоните как Poll, так и GetCurrentState - вам нужно только одно или другое.

С вашего вопроса это звучит как последнее - вы хотите GetCurrentState при нажатии кнопки - не Poll для изменения в цикле.

Если вы хотите получить текущее состояние, тогда вы хотите что-то вроде этого.

var directInput = new DirectInput(); 
var joystickState = new JoystickState(); 
var joystick = new Joystick(directInput, joystickGuid); 
joystick.Acquire(); 
joystick.GetCurrentState(ref joystickState); 
textBox1.Text = joystickState.X.ToString(); 

Если вы хотите опросить изменения, вы хотите что-то вроде этого.

var directInput = new DirectInput(); 
var joystick = new Joystick(directInput, joystickGuid); 
joystick.Acquire(); 
joystick.Properties.BufferSize = 128; 
while (true) 
{ 
    joystick.Poll(); 
    var data = joystick.GetBufferedData(); 
    foreach (var state in data) 
    { 
    if (state.Offset == JoystickOffset.X) 
    { 
     textBox1.Text = state.Value; 
    } 
    } 
} 
Смежные вопросы