#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
является один прямоугольник, и метод проверяет, перекрываются ли два прямоугольника.