Я все еще довольно плохо знаком с Pygame и программированием в целом.Я делаю игру, которая требует обнаружения столкновений, и у меня, похоже, с этим проблемы.Каждый раз, когда я запускаю свою программу, она обнаруживает несуществующие коллизии.Вот некоторые фрагменты из моего кода:
class Player(pygame.sprite.Sprite):
def __init__(self,x,y,width,height):
pygame.sprite.Sprite.__init__(self)
self.x = x
self.y = y
self.width = width
self.height = height
self.right = False
self.left = False
self.up = False
self.down = False
self.surf = pygame.Surface((50,50))
self.rect = self.surf.get_rect()
def draw(self):
pygame.draw.rect(screen, (0,0,0), (self.x, self.y, self.width, self.height))
def collision_test(self):
if pygame.sprite.collide_rect(self, block1):
print("a collision is detected")
Выше приведен мой класс игрока.
class Block1(pygame.sprite.Sprite):
def __init__(self,x,y,width,height):
pygame.sprite.Sprite.__init__(self)
self.x = x
self.y = y
self.width = width
self.height = height
self.surf = pygame.Surface((self.width,self.height))
self.rect = self.surf.get_rect()
def draw(self):
pygame.draw.rect(screen, (150,150,150), (self.x, self.y, self.width, self.height))
И это мой класс для препятствия, с которым должен столкнуться мой игрок.Я запускаю команду печати в обнаружении столкновений для отладки.Как я уже сказал, он просто постоянно печатает сообщение, которое я ему дал, даже когда они не сталкиваются.Там нет сообщений об ошибках, хотя.Любая помощь будет оценена!Заранее спасибо:)
EDIT:
Я изменил метод collision_test и добавил аргумент block1.Теперь это так:
def collision_test(self, block1):
if pygame.sprite.collide_rect(self, block1):
print("a collision is detected")
Мои спрайты player и block1 запускаются непосредственно перед основной лупой и выглядят так:
player = Player(50,50,50,50)
block1 = Block1(200, 200, 100, 100)
Я вызываю функцию collision_test наконец основной петли.Если вам это нужно, вот мой полный код: https://pastebin.com/LTQdLMuV