Движение игрока останавливается, когда я отпускаю одну из клавиш направления - PullRequest
0 голосов
/ 19 сентября 2019

Я пытался запрограммировать эту многопользовательскую игру для университета, используя 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);           
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...