IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Gestion collision pour polygone (pygame)


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut Gestion collision pour polygone (pygame)
    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

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 717
    Par défaut
    Citation Envoyé par chris7522 Voir le message
    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 !
    Normalement, ça se calcule en s'inspirant de ce genre de tuto.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut
    Une fois de plus , merci pour votre aide

Discussions similaires

  1. [débutant] Gestion images pour un jeu
    Par superpigeon dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 17/11/2006, 15h05
  2. gestion collision objet
    Par karasnake dans le forum Flash
    Réponses: 2
    Dernier message: 14/06/2006, 08h54
  3. Problème gestion actionListener pour JButton
    Par cedricbr dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/05/2006, 16h39
  4. [FLASH MX2004] Gestion de collisions pour plateformes
    Par sourivore dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 10/05/2006, 13h08
  5. Outils de Gestion DB pour Oracle
    Par juvamine dans le forum Oracle
    Réponses: 2
    Dernier message: 02/05/2006, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo