Bonjour a toutes et a tous ,

J'ai une classe 'Spark' qui produit des etincelles , j'aurai voulu gerer les collisions entre ces étincelles et mon vaisseau héro , un peu comme je l'ai fait pour les lasers de mon vaisseau héro vers mon premier groupe d'aliens :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
        for alien in aliens:  # aliens : 1 er groupe d'aliens
            # gestion collision du laser héro vers 1er groupe aliens
            if alien.visible:
                for laser in lasers:  # lasers : liste lasers héros
                    if laser.rect.x + laser.laser_w > alien.rect.x and laser.rect.x + laser.laser_w < alien.rect.x + \
                            alien.hitbox[2]:
                        if laser.rect.y + laser.laser_h > alien.rect.y and laser.rect.y + laser.laser_h < alien.rect.y + \
                                alien.hitbox[3]:
                            alien.hit()
                            lasers.pop(lasers.index(laser))
Voici ma classe Sparks :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Spark():
    def __init__(self, loc, angle, speed, color, scale=1):
        self.loc = loc
        self.angle = angle
        self.speed = speed
        self.scale = scale
        self.color = color
        self.alive = True
 
    def calculate_movement(self, dt):
        return [math.cos(self.angle) * self.speed * dt, math.sin(self.angle) * self.speed * dt]
 
 
    def move(self, dt):
        movement = self.calculate_movement(dt)
        self.loc[0] += movement[0]
        self.loc[1] += movement[1]
 
        self.speed -= 0.1
 
        if self.speed <= 0:
            self.alive = False
 
    def draw(self, surf):
        if self.alive:
            points = [
                [self.loc[0] + math.cos(self.angle) * self.speed * self.scale, self.loc[1] + math.sin(self.angle) * self.speed * self.scale],
                [self.loc[0] + math.cos(self.angle + math.pi / 2) * self.speed * self.scale * 0.3, self.loc[1] + math.sin(self.angle + math.pi / 2) * self.speed * self.scale * 0.3],
                [self.loc[0] - math.cos(self.angle) * self.speed * self.scale * 3.5, self.loc[1] - math.sin(self.angle) * self.speed * self.scale * 3.5],
                [self.loc[0] + math.cos(self.angle - math.pi / 2) * self.speed * self.scale * 0.3, self.loc[1] - math.sin(self.angle + math.pi / 2) * self.speed * self.scale * 0.3],
                ]
            pygame.draw.polygon(surf, self.color, points)
sparks = [],

Dans ma boucle :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        for v in enemyspaceships:  
            if v.health >= 1:
                sparks.append(
                    Spark([v.rect.x+100, v.rect.y+100], math.radians(random.randint(0, 360)), random.randint(3, 6), (240, 195, 0), 2))
                v.animate('paon')
                v.draw(win)
            else:
                explosesound.play()
                explosesound.set_volume(0.5)
                explosion = Explose(v.rect.x, v.rect.y, 'explose2', 300, 300)
                explosion_group.add(explosion)
                enemyspaceships.pop()
                spaceshipkills += 1
 
      for i, spark in sorted(enumerate(sparks), reverse=True):
            # cette formule de tri permet d'avoir un indice devant chaque instance pour ensuite
            # supprimer les instance de la liste sparks avec pop()
            spark.move(1)
            spark.draw(win)
            if not spark.alive:
                sparks.pop(i)
Avec ce genre de forme produite par ma classe 'Spark' (des polygones) comment pourrai je gérer mes collisions , pas avec un rect du coup !

D'avance je vous remercie