Как проверить столкновение двух объектов в pygame (colliderect)?
Делаю игру, где герой должен собирать монетки. Как понять, что герой коснулся монетки? Сейчас я сравниваю координаты кучей if, получается громоздко и работает криво. Есть нормальный способ?
2 ответа
В 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 за глаза.
Маленький нюанс: colliderect срабатывает каждый кадр, пока объекты пересекаются. Если ты прибавляешь очко прямо в этом if, оно может накрутиться на десятки за одно касание. Поэтому после столкновения сразу убирай/переставляй монетку, чтобы пересечение прекратилось.