Я новичок в 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
Какой прослушиватель/обработчик событий я могу вызвать после изменения состояния джойстика ⇐ C#
Место общения программистов C#
1719956878
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;
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78699347/what-listener-event-handler-i-can-call-after-the-joystick-state-changed[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия