Как сделать так, чтобы при нажатии на клавишу в WinForms с использованием C# Rectangle передвигался?

У меня возникла проблема с движением прямоугольника при нажатии клавиши в моей игре "Змейка". Я пробовал использовать таймер и код
"if (right == true)
rectangle.Location = new Point(rec.Location.X, rec.Location.Y + 50)",
но это не сработало. Есть ли другой способ, или я что-то делаю неправильно?
  • 30 октября 2023 г. 22:48
Ответы на вопрос 2
Если вы хотите, чтобы прямоугольник перемещался при нажатии на клавишу, вам нужно использовать обработчик события KeyDown формы и изменять положение прямоугольника внутри этого обработчика.

Вот пример кода, который может помочь вам реализовать это:

```csharp
private Rectangle rectangle; // ваш прямоугольник
private int deltaX = 10; // количество пикселей для перемещения по горизонтали
private int deltaY = 10; // количество пикселей для перемещения по вертикали

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    // При нажатии на клавишу, изменяем положение прямоугольника
    if (e.KeyCode == Keys.Right)
        rectangle.Location = new Point(rectangle.Location.X + deltaX, rectangle.Location.Y);
    else if (e.KeyCode == Keys.Left)
        rectangle.Location = new Point(rectangle.Location.X - deltaX, rectangle.Location.Y);
    else if (e.KeyCode == Keys.Up)
        rectangle.Location = new Point(rectangle.Location.X, rectangle.Location.Y - deltaY);
    else if (e.KeyCode == Keys.Down)
        rectangle.Location = new Point(rectangle.Location.X, rectangle.Location.Y + deltaY);
}
```

Убедитесь, что у вашей формы установлен обработчик события KeyDown на метод `Form1_KeyDown`. Вы можете сделать это в своем конструкторе формы, например вот так:

```csharp
public Form1()
{
    InitializeComponent();

    this.KeyDown += Form1_KeyDown;
}
```

Теперь, когда вы нажимаете на клавиши в форме, прямоугольник будет перемещаться в заданном направлении. Можете настроить значения `deltaX` и `deltaY` для изменения скорости перемещения.
Если ты работаешь с элементом Canvas, чтобы отрисовать что-то, используй функцию отрисовки. Чтобы вызвать эту функцию и обновить содержимое окна, используй метод Invalidate.
Похожие вопросы