Урок посвящен программированию управления машинкой в игре с помощью клавиатуры. Реализуем горизонтальное перемещение машинки с помощью клавиш со стрелками влево и вправо. Функциональность можно расширить, добавив управление по вертикали и диагоналям.
Отслеживание нажатия клавиш
Для перемещения машинки отслеживаем нажатия клавиш. Метод KeyPress срабатывает только один раз при полном нажатии. Для непрерывного отслеживания используем событие KeyDown.
Обработка события KeyDown
Создаем метод, обрабатывающий событие KeyDown. В методе объявляем переменную speed для скорости перемещения. С помощью параметра e.KeyCode получаем код нажатой клавиши.
Условие проверяет, нажата ли клавиша со стрелкой влево (Left) или клавиша A. Если да, машинка перемещается влево путем уменьшения координаты Left объекта player ( PictureBox2) на величину speed.
if (e.KeyCode == Keys.Left || e.KeyCode == Keys.A)
{
player.Left -= speed;
}
Аналогично, добавляем условие для перемещения вправо (Right или D):
else if (e.KeyCode == Keys.Right || e.KeyCode == Keys.D)
{
player.Left += speed;
}
Ограничение перемещения
Чтобы машинка не выходила за границы игрового поля, добавляем условия:
if (e.KeyCode == Keys.Left || e.KeyCode == Keys.A)
{
if (player.Left > 150)
{
player.Left -= speed;
}
}
else if (e.KeyCode == Keys.Right || e.KeyCode == Keys.D)
{
if (player.Left < 700)
{
player.Left += speed;
}
}
Значения 150 и 700 – предварительно подобранные границы игрового поля. Их можно изменить.
Перемещение окна игры мышью
Для перемещения окна игры мышью добавляем обработчики событий MouseDown, MouseUp и MouseMove к фоновому изображению (bg1 и bg2). Создаем методы: MouseClickDown, MouseClickUp, MouseClickMove. Нам потребуются поля: Point pos для хранения координат точки нажатия мыши и bool dragging для отслеживания состояния перетаскивания.
В MouseClickDown устанавливаем dragging = true и сохраняем координаты мыши в pos. В MouseClickUp устанавливаем dragging = false. В MouseClickMove, если dragging == true, вычисляем и устанавливаем новые координаты окна, учитывая смещение:
if (dragging)
{
Point currentPoint = PointToScreen(new Point(e.X, e.Y));
this.Location = new Point(currentPoint.X - pos.X, currentPoint.Y - pos.Y + bg1.Top);
}
bg1.Top, добавленная к Y координате, корректирует перемещение, учитывая положение фонового изображения.
В уроке реализовали управление машинкой с помощью клавиатуры, добавили ограничение движения и научились перемещать окно игры мышью. Несмотря на то, что перемещение окна может быть не идеально из-за динамического характера фоновых изображений, результат улучшает игровой опыт.