2016-10-21 4 views
0

Возможно ли прочитать контроллер Xbox One в приложении WPF? Я подключаю его через USB-кабель. Я бы хотел получить логические значения из кнопок и иметь возможность читать аналоговые значения из палочек и триггеров. Я буду использовать эти значения для управления роботом Pololu 3pi.Чтение контроллера Xbox в приложении WPF

Есть ли простой способ достичь этого?

+1

Вы можете использовать [SharpDX в] (HTTP: // sharpdx.org/) DirectInput или аналогичный. Это позволяет относительно легко взаимодействовать с любым устройством ввода. – SharpShade

+0

Если контроллер Xbox не использует DirectInput и использует USB-драйверы по умолчанию, вы можете использовать https://msdn.microsoft.com/en-us/library/windows/hardware/ff540174%28v=vs.85%29.aspx ? F = 255 & MSPPError = -2147217396 – bradbury9

ответ

2

Вы попробовали это :) Code4Fun может помочь вам с вашим контроллером.

https://elbruno.com/2014/06/28/coding4fun-xboxone-game-controller-c-fun-time-2/

с веб-сайта:

Основной вид кода WPF приложение является следующая

using System; 
using System.ComponentModel; 
using System.Runtime.CompilerServices; 
using System.Windows; 
using System.Windows.Threading; 
using SharpDX.XInput; 

namespace ElBruno.GameController 
{ 
    public partial class MainWindow : INotifyPropertyChanged 
    { 
     DispatcherTimer _timer = new DispatcherTimer(); 
     private string _leftAxis; 
     private string _rightAxis; 
     private string _buttons; 
     private Controller _controller; 

    public MainWindow() 
    { 
     DataContext = this; 
     Loaded += MainWindow_Loaded; 
     Closing += MainWindow_Closing; 
     InitializeComponent(); 
     _timer = new DispatcherTimer {Interval = TimeSpan.FromMilliseconds(100)}; 
     _timer.Tick += _timer_Tick; 
     _timer.Start(); 
    } 

    void _timer_Tick(object sender, EventArgs e) 
    { 
     DisplayControllerInformation(); 
    } 

    void DisplayControllerInformation() 
    { 
     var state = _controller.GetState(); 
     LeftAxis = string.Format("X: {0} Y: {1}", state.Gamepad.LeftThumbX, state.Gamepad.LeftThumbY); 
     RightAxis = string.Format("X: {0} Y: {1}", state.Gamepad.RightThumbX, state.Gamepad.RightThumbX); 
     //Buttons = string.Format("A: {0} B: {1} X: {2} Y: {3}", state.Gamepad.Buttons.ToString(), state.Gamepad.LeftThumbY); 
     Buttons = string.Format("{0}", state.Gamepad.Buttons); 

    } 

    void MainWindow_Closing(object sender, CancelEventArgs e) 
    { 
     _controller = null; 
    } 

    void MainWindow_Loaded(object sender, RoutedEventArgs e) 
    { 
     _controller = new Controller(UserIndex.One); 
     if (_controller.IsConnected) return; 
     MessageBox.Show("Game Controller is not connected ... you know ;)"); 
     App.Current.Shutdown(); 
    } 

    #region Properties 

    public string LeftAxis 
    { 
     get 
     { 
      return _leftAxis; 
     } 
     set 
     { 
      if (value == _leftAxis) return; 
      _leftAxis = value; 
      OnPropertyChanged(); 
     } 
    } 

    public string RightAxis 
    { 
     get 
     { 
      return _rightAxis; 
     } 
     set 
     { 
      if (value == _rightAxis) return; 
      _rightAxis = value; 
      OnPropertyChanged(); 
     } 
    } 

    public string Buttons 
    { 
     get 
     { 
      return _buttons; 
     } 
     set 
     { 
      if (value == _buttons) return; 
      _buttons = value; 
      OnPropertyChanged(); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    #endregion 
} 

}