Какой прослушиватель/обработчик событий я могу вызвать после изменения состояния джойстикаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Какой прослушиватель/обработчик событий я могу вызвать после изменения состояния джойстика

Сообщение Anonymous »

Я новичок в C# и в настоящее время работаю над сопоставлением ввода с джойстика со ползунком в приложении WPF с помощью SharpDX.DirectInput. Существует ли эквивалентный прослушиватель, аналогичный onStateChange() или onValueChanged() в Android, который я могу использовать для определения того, когда пользователь тянет джойстик?
Решение, которое я нашел, активно применялось использование бесконечного цикла while для получения состояний джойстика, что очень затратно и постоянно нагружает процессор.
using System.Windows;
using System.Windows.Controls;
using SharpDX.DirectInput;

namespace TestJoystick
{
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow : Window
{
private Joystick joystick;

public MainWindow()
{
InitializeComponent();

Slider slider = (Slider )this.FindName("slider");

// create joystick
joystick = InitJoystick();

// Poll events listener/callback here, instead of an infinite loop below

//while (true)
//{
// joystick.Poll();
// var datas = joystick.GetBufferedData();
// foreach (var state in datas)
// Console.WriteLine(state);
//}
}

private void OnSliderValueChanged(object sender, RoutedPropertyChangedEventArgs e)
{
TextBox textBox = (TextBox) this.FindName("textBox");
textBox.Text = ((int) e.NewValue).ToString();
}

private Joystick InitJoystick()
{
// 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, exit
if (joystickGuid == Guid.Empty)
{
Console.WriteLine("No joystick/Gamepad found.");
Console.ReadKey();
Environment.Exit(1);
}

// Instantiate the joystick
Joystick joystick = new Joystick(directInput, joystickGuid);
Console.WriteLine($"Found Joystick/Gamepad with GUID: {joystickGuid}");

// Query all supported ForceFeedback effects
var allEffects = joystick.GetEffects();
foreach (var effectInfo in allEffects)
Console.WriteLine($"Effect available: {effectInfo.Name}");

// Set BufferSize to use buffered data
joystick.Properties.BufferSize = 128;

// Acquire the joystick
joystick.Acquire();

return joystick;
}
}
}


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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