Могу ли я использовать .colliderect() без использования спрайтов? -PyGame

#python #pygame #collision-detection

#python #pygame #обнаружение столкновений

Вопрос:

Я пытаюсь создать небольшой бесконечный раннер и уже сделал большую часть материала, единственное, что осталось, это обнаружение столкновений. Я знаю о функции (), но не могу заставить ее работать. Возможно, я просто сделал это неправильно, но у меня закончились идеи, как это исправить.

Прямо сейчас у меня есть класс Player, подобный этому:

 class Player:
def __init__(self):
    self.size = (20, 40)
    self.color = white
    self.pos = [200, 330]
    self.shape_body = (self.pos, self.size)
    self.rect = pygame.Rect(self.shape_body)
  

и препятствие

 class obstacle_ground1:

def __init__(self):
    self.pos = [1000, 330]
    self.size = (40, 40)
    self.shape = (self.pos, self.size)
    self.rect = pygame.Rect(self.shape)
    self.color = white
  

(У меня есть разные, поэтому есть 1)
Все препятствия находятся в списке, и я хотел проверить наличие подобных столкновений следующим образом

 def Check_if_dead(self):
    return self.rect.collidedict(obstacles[0].rect)
  

Как функция класса Player

Но тогда я просто получаю ошибку типа:

Аргументом должен быть dict с ключами rectstyle.

Теперь я знаю, что мог и, возможно, должен был использовать спрайты, но я не хочу переделывать все остальное, поэтому, если вы знаете обходной путь или просто заметили мою глупую ошибку, пожалуйста, дайте мне знать

Ответ №1:

Вы получаете сообщение об ошибке

Аргументом должен быть dict с ключами rectstyle.

потому что вы используете неправильный метод.

Если вы хотите проверить, пересекаются ли 2 прямоугольника, тогда вам нужно использовать метод, pygame.Rect.colliderect а не pygame.Rect.collidedict :

return self.rect.collidedict(obstacles[0].rect)

 return self.rect.colliderect(obstacles[0].rect)
  

Аргументом для collidedict должен быть словарь. Метод будет проверять, пересекается ли один из прямоугольников в словаре.
аргументом для colliderect является один прямоугольник, и метод проверяет, перекрываются ли два прямоугольника.