2013-08-24 5 views
0

나는 C#과 Sharpdx에 관해 새삼이다. 며칠 동안이 코드 문제가 있으며 작동하지 않는 방법을 이해하지 못합니다! 이것은 조이스틱의 한 축의 값을 획득하여 양식의 텍스트 상자에 표시하는 간단한 작업입니다.SharpDX로 조이스틱을 취득

나는 Visual Studio 2010 Express에 대한 새로운 프로젝트를 만들었고 조이스틱 축 (X 축)의 값을 보여주기 위해 단추와 텍스트 상자가있는 Form을 만들었습니다.

아래 코드의 첫 번째 부분은 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

모르는 나는 버튼을 누르면 모든 시간을 변경하지 않는다는 것입니다 PollGetCurrentState - 둘 중 하나만 수행하면됩니다.

질문에서 그것은 후자와 같을 것입니다 - 버튼을 누를 때 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; 
    } 
    } 
}