我是关于C#和Sharpdx的新手。我有几天的代码问题,我不明白的方式不起作用!这是一个简单的任务,即获取操纵杆的一个轴的值并将其显示在表格的文本框中。
我在Visual Studio 2010 express上做了一个新项目,我做了一个带有按钮和textBox的Form,用于显示操纵杆轴(X轴)的值。
这里的代码的第一部分是sharpdx文档中的示例,第二部分有点不同。
问题是每次按下按钮时值都不会改变
出了点问题,但我不知道是什么
private void button3_Click(object sender, EventArgs e)
{
// 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, throws an error
if (joystickGuid == Guid.Empty)
{
Console.WriteLine("No joystick/Gamepad found.");
Console.ReadKey();
Environment.Exit(1);
}
// Instantiate the joystick e stato
Joystick joystick = new Joystick(directInput, joystickGuid);
JoystickState stato = new JoystickState();
// specifico se relativo o assoluto
joystick.Properties.AxisMode = DeviceAxisMode.Absolute;
// effettuo un collegamento con il joystick
joystick.Acquire();
// qui faccio una acquisizione dello stato che memorizzo
joystick.Poll();
// effettuo una lettura dello stato
joystick.GetCurrentState(ref stato);
// stampo il valore dell'ordinata
textBox1.Text = stato.X.ToString();
}
答案 0 :(得分:2)
我认为问题在于您同时致电Poll
和GetCurrentState
- 您只需要做一个或另一个。
从你的问题听起来像后者 - 按下按钮时你想要GetCurrentState
- 而不是Poll
来改变循环。
如果你想获得当前状态,那么你想要这样的东西。
var directInput = new DirectInput();
var joystickState = new JoystickState();
var joystick = new Joystick(directInput, joystickGuid);
joystick.Acquire();
joystick.GetCurrentState(ref joystickState);
textBox1.Text = joystickState.X.ToString();
如果您想要轮询更改,您需要这样的内容。
var directInput = new DirectInput();
var joystick = new Joystick(directInput, joystickGuid);
joystick.Acquire();
joystick.Properties.BufferSize = 128;
while (true)
{
joystick.Poll();
var data = joystick.GetBufferedData();
foreach (var state in data)
{
if (state.Offset == JoystickOffset.X)
{
textBox1.Text = state.Value;
}
}
}