Любой способ использовать контроллер Xbox без таймера в WpfC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Любой способ использовать контроллер Xbox без таймера в Wpf

Сообщение Anonymous »

Я использую SharpDX.XInput, чтобы обнаружить контроллер и получить от него информацию.
Я в основном использую таймер и проверяю состояние моего контроллера в каждый тик.
Проблема в том, что он недостаточно последователен. Иногда я нажимаю правую кнопку, и она работает, а иногда не работает. (Хотя я делаю интервал таймера равным 1 микросекунде, что является самым низким интервалом)
Мой код такой.

Код: Выделить всё

public static Controller Controller { get; set; }
public static State ControllerState { get; set; }

Controller = new Controller(UserIndex.One);

if (Controller.IsConnected == false)
return;

_deviceType = SharpDX.DirectInput.DeviceType.Gamepad;

_dispatcherTimer = new DispatcherTimer();
_dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
_dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 0,1);

_dispatcherTimer.Start();

private static async void dispatcherTimer_Tick(object? sender, EventArgs e)
{
await TimerTick(_deviceType);
}

private static async Task TimerTick(SharpDX.DirectInput.DeviceType deviceType)
{
try
{

ControllerState = Controller.GetState();

_stateY = ControllerState.Gamepad.LeftThumbY;
_stateX = ControllerState.Gamepad.LeftThumbX;
_gamepadButtonFlags = ControllerState.Gamepad.Buttons.ToString();
if (_gamepadButtonFlags == "None")
{
HandleDPadButtons(true);
HandleDirections(true);
HandleDirectionCount(0);
return;

}

switch (_gamepadButtonFlags)
{
case "DPadRight":
Right();
break;
case "DPadUp":
Up();
break;
case "DPadLeft":
Left();
break;
case "DPadDown":
Down();
break;
case "A":
PressA();
break;
case "B":
PressB();
break;
case "X":
PressX();
break;
case "Y":
PressY();
break;
default:
break;
}

if (!_gamepadButtonFlags.Contains("A") &&
!_gamepadButtonFlags.Contains("B") &&
!_gamepadButtonFlags.Contains("X") &&
!_gamepadButtonFlags.Contains("Y"))
{
HandleDPadButtons(true);
}

if (!_gamepadButtonFlags.Contains("DPadRight") &&
!_gamepadButtonFlags.Contains("DPadUp") &&
!_gamepadButtonFlags.Contains("DPadLeft") &&
!_gamepadButtonFlags.Contains("DPadDown"))
{
HandleDirections(true);
HandleDirectionCount(0);
}

}
catch (SharpDXException sharpDXException)
{
_dispatcherTimer.Stop();
_buttonTimer.Stop();
MessageController.ShowMessage("Controller lost!", "Error on joystick timer.", System.Windows.MessageBoxButton.OK, MessageBoxImage.Error);
}
}
Я буду признателен за любую помощь/предложение, чтобы использовать контроллер Xbox так же согласованно, как и любые другие игры для настольных компьютеров в WPF.

Подробнее здесь: https://stackoverflow.com/questions/785 ... mer-in-wpf
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как отключить беспроводной контроллер Xbox? [закрыто]
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Как записать данные на GIP -устройство (контроллер серии Xbox)?
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Как записать данные на GIP -устройство (контроллер серии Xbox)?
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Как записать данные на GIP -устройство (контроллер серии Xbox)?
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Как записать данные на GIP -устройство (контроллер серии Xbox)?
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»