如何解决操纵杆坐标
大家好,我需要你的帮助,使用开放 TK 在 dot net framework 4.5 上使用 Xaml 我想通了。使用以下代码。我想在 Windows 窗体上复制它,但打开 TK 不喜欢窗体。我做了很多谷歌搜索,发现了 2 个选项 SlimDX 和 SharpDX directinput。我的目标是使用操纵杆通过操纵杆输入沿表单移动控件。我似乎无法像使用开放式 TK 那样复制轴 1 和轴 2。我正在寻找示例 0 或 1 和 -1,如 XAML 的 c3 清晰代码所示。
using OpenTK.Input;
private dispatcherTimer clock;
private GamePadState oldgstate;
private JoystickState oldjstate;
private int activeGamepad = 0;
private int activeJoystick = 0;
public MainWindow()
{
InitializeComponent();
createNewTimer();
oldgstate = GamePad.GetState(activeGamepad);
oldjstate = Joystick.GetState(activeJoystick);
}
//public Direction TestOpenTK.MainWindow.MyProperty { get; set; }
private void createNewTimer() {
clock = new dispatcherTimer();
clock.Tick += new EventHandler(checkGamePads);
clock.Interval = new TimeSpan(0,25);
clock.Start();
}
private void checkGamePads(Object sender,EventArgs e)
{
var gState = GamePad.GetState(activeGamepad);
var jstate = Joystick.GetState(activeJoystick);
if (!gState.Equals(oldgstate))
{
txtGamePadDebug.Text = gState.ToString();
}
if (!gState.Equals(oldjstate))
{
//txtJoystickDebug.Text = jstate.ToString() + Environment.NewLine + " Axis 1 = " + jstate.GetAxis(JoystickAxis.Axis1).ToString()
// + Environment.NewLine + " Throttle Axis 2 = " + jstate.GetAxis(JoystickAxis.Axis2).ToString() + Environment.NewLine + " Axis 3 Rotation = " +
// jstate.GetAxis(JoystickAxis.Axis3).ToString() + Environment.NewLine + " Axis 4 = " + jstate.GetAxis(JoystickAxis.Axis4).ToString();
for (int i = 0; i < 4; i++)
{
var state = Joystick.GetState(i);
if (state.IsConnected)
{
需要使用 SharpDX 或 SlimDX 获得类似的 Axis 或弄清楚如何在 windows 窗体上使用 open TK
float x = state.GetAxis(JoystickAxis.Axis0); float y = state.GetAxis(JoystickAxis.Axis1);
//Convert and round x and y
int X = (int)Math.Round(x);
int Y = (int)Math.Round(y);
//Set axis direction using integers X and Y
if (X == 0 && Y==1)
{
// N
txtJoystickDebug.Text = "north";
}
if (X == 1 && Y == 1)
{
// NE Up and right
txtJoystickDebug.Text = "north East";
}
if (X == 1 && Y == 0)
{
//E
txtJoystickDebug.Text = "East";
}
if (X == 1 && Y == -1)
{
//SE Down Right
txtJoystickDebug.Text = "South East";
}
if (X == 0 && Y == -1)
{
//S
txtJoystickDebug.Text = "South";
}
if (X == -1 && Y == -1)
{
// SW Down Left
txtJoystickDebug.Text = "South West";
}
if (X == -1 && Y == 0)
{
//W
txtJoystickDebug.Text = "West";
}
if (X == -1 && Y == 1)
{
//NW Up or West
txtJoystickDebug.Text = "north West";
}
//Slider aka throttle axis
//float T = state.GetAxis(JoystickAxis.Axis2);
// Print the current state of the joystick
//Console.WriteLine(T);
//txtJoystickDebug.Text = "X = " + Math.Round(x).ToString() + Environment.NewLine + "Y = " + Math.Round(y).ToString()
// + Environment.NewLine + " Throttle = " + T.ToString();
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。