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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 02 марта 2019

Появляется сообщение об ошибке

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

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

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

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

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

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

...