Глава 20 · Разработка игр с Pygame

Rect: позиция, размер и координаты

pygame.Rect хранит позицию и размер вместе, а ось Y на экране растёт вниз — в отличие от Turtle и математики на бумаге.

Мы уже упоминали pygame.Rect в разделе 20.3 как способ хранить позицию и размер вместе. Пора познакомиться с ним по-настоящему — и заодно разобраться, как в Pygame устроена система координат.

pygame.Rect

rect_osnovy.py
igrok_rect = pygame.Rect(100, 200, 40, 40)   # x, y, ширина, высота

print(igrok_rect.x, igrok_rect.y)       # левый верхний угол
print(igrok_rect.center)                # центр — кортеж (x, y)
print(igrok_rect.right, igrok_rect.bottom)   # правый и нижний край

igrok_rect.x += 5        # передвинуть весь прямоугольник вправо
igrok_rect.center = (300, 300)   # или сразу задать новый центр

Rect удобен именно тем, что не заставляет вручную помнить четыре отдельные переменные (x, y, ширина, высота) и пересчитывать границы объекта самостоятельно — за это отвечают готовые атрибуты вроде .right, .center, .bottom.

Система координат: мир и экран

В Pygame точка (0, 0) — это левый верхний угол экрана, а ось Y растёт вниз, а не вверх. Это важно держать в голове, особенно после Turtle (главы 6–7, 12 и 19), где ось Y растёт вверх, как в математике на бумаге:

Математика / TurtlePygame
Начало координат (0, 0)Центр экранаЛевый верхний угол
Направление роста YВверхВниз
"Прыжок вверх" в кодеy увеличиваетсяy уменьшается

Отсюда частая на первых порах путаница: код «прыжка» персонажа выглядит как y -= skorost_pryzhka, а не y += — потому что «выше на экране» означает «меньшее значение Y».

Мировые координаты против экранных
В играх с прокруткой (скроллящийся уровень, камера, следящая за героем) полезно различать мировые координаты объекта (его положение в игровом мире целиком) и экранные координаты (где именно он рисуется на видимом сейчас куске экрана) — они совпадают, только пока камера не двигается. В проектах этой книги камера неподвижна, поэтому мировые и экранные координаты — это одно и то же, но в больших играх это разделение — стандартная часть архитектуры.
Практика: Rect и координаты
Проверяется прямо в браузере — установка Pygame не требуется
Открыть практику →