Я новичок в 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#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Обработчик исключений Spring @Controller и глобальный обработчик исключений. Как вызвать оба
Anonymous » » в форуме JAVA - 0 Ответы
- 64 Просмотры
-
Последнее сообщение Anonymous
-