1

I was wondering how to do collision detection in pygame. My game doesn't use sprites, it just blits 2 images. How could I check if they are colliding? I know there is sprite.collide, but it doesn't use sprites. Is there some way to check collision by comparing the x and y values of each image?

def fish(x,y):
    gameDisplay.blit(fishImg,(x,y))

def enemy(enemyX,enemyY):
    gameDisplay.blit(enemyImg,(enemyX,enemyY))

def main():

    x = displayWidth/2
    y = displayHeight/2

    enemyX = random.randint(0,displayWidth)
    enemyY = random.randint(0,displayHeight)

    xChange = 0
    yChange = 0

    while True:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_a:
                    xChange = -5
                elif event.key == pygame.K_d:
                    xChange = 5
                elif event.key == pygame.K_w:
                    yChange = -5
                elif event.key == pygame.K_s:
                    yChange = 5

            if event.type == pygame.KEYUP:
                if event.key == pygame.K_a or event.key == pygame.K_d:
                    xChange = 0
                elif event.key == pygame.K_w or event.key == pygame.K_s:
                    yChange = 0

        x += xChange
        y += yChange

        gameDisplay.fill(red)
        fish(x,y)

        enemy(enemyX,enemyY)

        if  

        pygame.display.update()
        clock.tick(30)

main()
pygame.quit()
quit()
Caleb Shaw
  • 73
  • 1
  • 9

1 Answers1

1

Use pygame.Rect and colliderect() to check for collision.

Create pygame.Rect objects, with the size of the image and the location, where you have blit the images.
pygame.Surface.get_rect() creates a pygame.Rect object at position (0, 0), but the top left position can be set by the keyword argument topleft:

fishRect  = fishImg.get_rect(topleft = (x, y))
enemyRect = enemyImg.get_rect(topleft = (enemyX, enemyY))

if fishRect.colliderect(enemyRect):
    # [...] collision detected
Rabbid76
  • 202,892
  • 27
  • 131
  • 174