I am making a flappy bird replica and I can't get a collision mechanism. At the moment i'm trying to use .coliderect() but i'm not 100% sure how to. Here is the two classes. I'd like the program to do something, or just print('x') when the bird and the pipe collide, but when they collide at the moment the program does not do or output anything.
import pygame vec = pygame.math.Vector2 BLACK = (0,0,0) WIDTH = 500 HEIGHT = 400 pygame.init() window = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption('Flappy Bird') clock = pygame.time.Clock() class Bird(): def __init__(self): self.skin = pygame.image.load('bird2.png') self.rect = self.skin.get_rect() self.rect.center = (WIDTH / 2, HEIGHT / 2) self.vx = 0 self.vy = 0 self.pos = vec(WIDTH / 2, HEIGHT / 2) self.vel = vec(0, 0) self.acc = vec(0, 0) def update(self): for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() window.fill(BLACK) self.acc = vec(0, 0.7) #having 0.5 adds gravity self.vy = 0 keys = pygame.key.get_pressed() if keys[pygame.K_SPACE]: self.vel.y = -7 if keys[pygame.K_LEFT]: self.acc.x = -0.5 #change to y to add vertical motion if keys[pygame.K_RIGHT]: self.acc.x = 0.5 #change to y to add vertical motion #applys friction self.acc.x += self.vel.x * -0.08 #FRICTION #motion equations self.vel += self.acc self.pos += self.vel + 0.5 * self.acc self.rect.center = self.pos window.blit(self.skin, self.pos) class Pipe(): def __init__(self,x,y): self.image = pygame.Surface((50,60)) self.image.fill(RED) self.rect = self.image.get_rect() self.pos = vec(x,y) def blit_pipe(self): window.blit(self.image, self.pos) def border_check(): if (flappy.pos.y)+32 > HEIGHT: #this is the very top of the flappy print("You are under\n") pygame.quit() quit() if flappy.pos.y < 0: print("You are over\n") #this is the very top of the flappy pygame.quit() quit() pipey = Pipe(300,200) pipey.blit_pipe() pipey2 = Pipe(100,200) pipey2.blit_pipe() flappy = Bird() window.blit(flappy.skin, flappy.pos) while True: border_check() flappy.update() pipey.blit_pipe() pipey2.blit_pipe() if flappy.rect.colliderect(pipey.rect): print('x') clock.tick(30) pygame.display.update()