← Все вопросы

Как проверить столкновение двух объектов в pygame (colliderect)?

Задан 1 месяц назад1.5к просмотров2 ответа
7

Делаю игру, где герой должен собирать монетки. Как понять, что герой коснулся монетки? Сейчас я сравниваю координаты кучей if, получается громоздко и работает криво. Есть нормальный способ?

2 ответа

12
✓ Принятый ответ — помог автору

В pygame для этого есть Rect и метод colliderect() — он сам считает пересечение двух прямоугольников. Гораздо чище, чем сравнивать координаты вручную.

player = pygame.Rect(x, y, 40, 40)
coin   = pygame.Rect(300, 200, 20, 20)

if player.colliderect(coin):
    print("Подобрал монетку!")
    score += 1
    # переставить монетку в новое место или убрать

Rect удобен ещё и тем, что через него же можно рисовать (pygame.draw.rect(screen, цвет, player)) и двигать (player.x += speed). Заведи героя и предметы как Rect сразу — и весь код упростится.

Если объекты круглые и нужна точность по кругу — считай расстояние между центрами, но для большинства школьных игр colliderect за глаза.

5

Маленький нюанс: colliderect срабатывает каждый кадр, пока объекты пересекаются. Если ты прибавляешь очко прямо в этом if, оно может накрутиться на десятки за одно касание. Поэтому после столкновения сразу убирай/переставляй монетку, чтобы пересечение прекратилось.

Ваш ответ

Войдите, чтобы ответить на вопрос.