1
votes

I'm coding my first game of Pygame. I'm trying to make the collision detection but works sometimes-

I tryed to use pygame.sprite.groupcollide and I actually using pygame.sprite.collide_rect

This is my collision code:

for event in pygame.event.get():
    collision = pygame.sprite.collide_rect(Dog, spikeUp0) or pygame.sprite.collide_rect(Dog, spikeUp1) or pygame.sprite.collide_rect(Dog, spikeDown0) or pygame.sprite.collide_rect(Dog, spikeDown1)
    if collision:
        Game = False
        gameOver()

I except that when I touch the spikes, starts the gameOver function, but only sometimes works.

1

1 Answers

1
votes

You've to do the collision test in the main loop rather then the event loop. The event loop is executed only when an event occurs, this causes that it "only sometimes works". The main loop is executed continuously.

e.g.

# main application loop 
while run:

    # event loop
    for event in pygame.event.get():

        # [...] event handling    


    # collison test
    collision = pygame.sprite.collide_rect(Dog, spikeUp0) or pygame.sprite.collide_rect(Dog, spikeUp1) or pygame.sprite.collide_rect(Dog, spikeDown0) or pygame.sprite.collide_rect(Dog, spikeDown1)
    if collision:
        Game = False
        gameOver()