Я пытался запрограммировать эту многопользовательскую игру для университета, используя winforms, я знаю, что это очень неудобно, но это то, что мы должны сделать.Для движения игрока я использую this.KeyDown
в моем методе Form1
, чтобы он мог регистрировать любые щелчки, сделанные при открытии Form1
.
public Form1()
{
InitializeComponent();
this.KeyPreview = true;
this.KeyDown += Form1_KeyDown;
}
Как ни странно, поскольку последовательность нажатия кнопки вызывает эту проблему, возникает,Например: если я нажимаю кнопки ВВЕРХ-ПРАВО, игрок движется по диагонали, и если я отпускаю первую нажатую кнопку, которая ВВЕРХ, игрок начинает двигаться ВПРАВО, но если бы я отпустил кнопку, нажатую второй раз, что ВПРАВО, игрок должен начать двигаться прямоUP, но вместо этого он останавливается.Не могли бы вы помочь мне решить эту проблему?
Вот код метода Form1_KeyDown()
:
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (Keyboard.IsKeyDown(Key.Up) && Keyboard.IsKeyDown(Key.Right))
{
location.X += 4;
location.Y -= 4;
richTextBox1.AppendText("Up Right \n");
}
else if (Keyboard.IsKeyDown(Key.Up) && Keyboard.IsKeyDown(Key.Left))
{
location.X -= 4;
location.Y -= 4;
richTextBox1.AppendText("Up Left \n");
}
else if (Keyboard.IsKeyDown(Key.Down) && Keyboard.IsKeyDown(Key.Left))
{
location.X -= 4;
location.Y += 4;
richTextBox1.AppendText("Down Left \n");
}
else if (Keyboard.IsKeyDown(Key.Down) && Keyboard.IsKeyDown(Key.Right))
{
location.X += 4;
location.Y += 4;
richTextBox1.AppendText("Down Right \n");
}
else if (Keyboard.IsKeyDown(Key.Right))
{ location.X += 4;
richTextBox1.AppendText("Right \n");
}
else if (Keyboard.IsKeyDown(Key.Left))
{ location.X -= 4;
richTextBox1.AppendText("Left \n");
}
else if (Keyboard.IsKeyDown(Key.Up))
{ location.Y -= 4;
richTextBox1.AppendText("Up \n");
}
else if (Keyboard.IsKeyDown(Key.Down))
{ location.Y += 4;
richTextBox1.AppendText("Down\n");
}
PlayingField_Paint();
DrawPlayer(location, Color.Red);
}