2 votes

Détection de collision Pygame entre des objets dans un groupe

Je suis en train de créer un jeu simple, j'ai essentiellement une classe zombie que j'ai placée dans un groupe pour pouvoir avoir plusieurs instances indéfiniment :

class zombie(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self,zombiegroup)
        self.pos=(random.randrange(5,695),random.randrange(5,455))
        self.image=zombie_image
        self.rimage=self.image
        self.rect=self.image.get_rect().move(self.pos)
        self.speed=5

    def update(self):
        zx=self.rect.topleft[0]-player.rect[0]
        zy=self.rect.topleft[1]-player.rect[1]
        rads=math.atan2(-zy, zx)
        rads %= 2*pi
        angle = math.degrees(rads)
        self.rimage=pygame.transform.rotate(self.image, angle-90)
        size=self.rimage.get_size()

        if player.rect[0]self.rect[0]:
            self.rect[0]+=self.speed

        if player.rect[1]self.rect[1]:
            self.rect[1]+=self.speed

        screen.blit(self.rimage, (self.rect.topleft[0]-size[0]/2,self.rect.topleft[1]-size[1]/2))

et mon groupe est simplement :

zombiegroup=pygame.sprite.Group()

C'est assez basique, mais j'aimerais savoir comment tester si chacun de ces zombies entre en collision les uns avec les autres, sinon, après un certain temps de poursuite, ils fusionnent tous en un seul zombie à l'écran. Je ne sais pas comment gérer le groupe pour faire cela, ou même si je devrais utiliser le groupe pygame.

Merci les gars,

Alex

1voto

Groditz Points 115

La méthode la plus rapide, mais sale, consiste à garder une trace des rectangles légèrement plus petits que les zombies eux-mêmes et à vérifier s'ils entrent en collision. Vérifier pixel par pixel a un impact énorme sur les FPS.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X