← Карта тем
Alterna · глава 52 · страница 52.2

События и спрайты

Интерактивный проект реагирует на события, меняет состояние и перерисовывает спрайты.

Нажатие клавиши не двигает картинку напрямую. Оно создаёт событие; обработчик изменяет координаты в состоянии; затем сцена рисуется заново. Такое разделение делает игру проверяемой.

событиякоординатысостояние
01

Путь одного события

1 · вводНажата ArrowRight
2 · событие{key: "right"}
3 · updatex = x + speed
4 · проверкакрай и стены
5 · drawновый кадр

Если обработчик только рисует новый круг, но не меняет x в состоянии, следующий кадр вернёт старую позицию.

02

Система координат сцены

Ось x

Растёт слева направо. Изменение x управляет горизонтальным движением.

Ось y

В Canvas растёт сверху вниз. Чтобы поднять спрайт, y уменьшают.

КлавишаИзменениеПроверка
x -= speedx ≥ radius
x += speedx ≤ width-radius
y -= speedy ≥ radius
y += speedy ≤ height-radius
03

Спрайт и состояние

Геометрия

x, y, размер и направление нужны для движения и столкновений.

Правила

Скорость, жизни, очки и режим определяют допустимые изменения.

Внешность

Цвет и образ отображают состояние, но не должны быть единственным местом хранения данных.

state = {
  "x": 70, "y": 200,
  "speed": 24,
  "score": 0,
  "stars": [[180, 100], [350, 185]]
}
04

Несколько сценариев

В Scratch-подобной среде два сценария могут быть активны одновременно: один двигает фон, другой проверяет таймер, третий слушает клавиши. Ошибка гонки появляется, если сценарии меняют одну переменную без понятного правила.

Флаг

Создаёт начальное состояние и запускает основной цикл.

Клавиша

Изменяет движение только после конкретного пользовательского ввода.

Сообщение

Связывает спрайты без прямого изменения чужих внутренних данных.

Клон

Создаёт новый экземпляр с собственными координатами и состоянием.

05

Отладка событий

  1. 1. Проверь, происходит ли событие и тот ли обработчик запущен.
  2. 2. Покажи на сцене текущие x, y, скорость и режим.
  3. 3. Выполни одно событие и сравни состояние до и после.
  4. 4. Проверь границы и столкновение отдельно от движения.
  5. 5. Повтори тест после рестарта: начальные данные должны восстановиться.