Движение по кадрам

Передвигаем корабль плавно и не выпускаем его за край экрана.

Кадр 2D-игры Лови звёзды

Цель урока: Связать удержание клавиши с перемещением каждого кадра.

Как работать с примерами

Arcade запускается на компьютере. Первый урок показывает основу игрового файла; далее это фрагменты полной игры. Открой полный код и меняй в нём нужные строки. Кнопка онлайн IDE для этого проекта не используется.

Шаг 1 · Вычисли направление

Если нажато вправо, добавляем 1; если влево — вычитаем 1.

Python
left_pressed = Falseright_pressed = Truedirection = int(right_pressed) - int(left_pressed)print(direction)
Что увидишь
1

Что происходит в коде

  1. int(True) превращается в 1, int(False) — в 0.
  2. 1 − 0 даёт направление вправо.
  3. Когда обе клавиши отпущены, направление равно нулю.

Шаг 2 · Сделай движение ровным

on_update получает время с прошлого кадра. Умножение на delta_time сохраняет похожую скорость на разных компьютерах.

Python
direction = int(self.right_pressed) - int(self.left_pressed)self.ship_x += direction * SHIP_SPEED * delta_timeself.ship_x = max(35, min(WIDTH - 35, self.ship_x))
Что увидишь
Корабль движется в нужную сторону и останавливается у края.

Что происходит в коде

  1. direction выбирает лево, право или стоять на месте.
  2. SHIP_SPEED * delta_time превращает скорость «пиксели в секунду» в сдвиг за один кадр.
  3. min и max ограничивают x так, чтобы корабль не вылетел за экран.

Попробуй сам

  1. Уменьши SHIP_SPEED с 420 до 250 и сравни движение.
  2. Найди правую границу, если ширина окна 900.
  3. Предскажи direction, когда нажаты сразу обе клавиши.

Меняй одну строчку за раз, сохраняй файл и запускай игру на компьютере снова.

Как это работает в полной игре

on_update() полной игры вызывается многократно. В нём перемещается корабль и проверяются падающие предметы.

Скачать проект Arcade
Заметка для преподавателя

Объясните delta_time через секундомер: машина может рисовать 30 или 60 кадров, но за одну секунду корабль должен пройти примерно одинаковое расстояние.