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 entre group et liste


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 entre group et liste
    Bonjour a toutes et a tous,
    J'ai une premier classe qui hérite de pygame.sprite.Sprite et utilise le conteneur Group avec la méthose add() en autre :
    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
    class Explose(pygame.sprite.Sprite):  # Explosions enemyspaceship
        burn = False
        def __init__(self, x, y, file, scale_x=0, scale_y=0, range_number=5, explose_spped=5):
            super().__init__()
            self.images = []
            for num in range(range_number):
                img = pygame.image.load(f"data/{file}/{file}{num}.png").convert_alpha()
                img = pygame.transform.scale(img, (scale_x, scale_y))
                self.images.append(img)
            self.index = 0
            self.image = self.images[self.index]
            self.explose_mask = pygame.mask.from_surface(self.image)
            self.rect = self.image.get_rect()
            self.rect.x = x
            self.rect.y = y
            self.counter = 0
            self.explose_speed = explose_spped
    Et une autre classe qui utilise une liste pour stocker les objets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class spaceship():
        def __init__(self):
            self.image = pygame.image.load('spaceship0.png').convert_alpha()
            self.spaceship_mask = pygame.mask.from_surface(self.image)
            self.rect = self.image.get_rect()
            self.rect.x = 50
            self.rect.y = 350
    ...
    Est il possible de gérer les collisions entre ces 2 classes en utilisant quelque chose de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        for d in hero_list:
               for e in explose_group:
                    offset_x = h.rect.x - e.rect.x
                    offset_y = h.rect.y - e.rect.y
                    if e.explose_mask.overlap(h.spaceship_mask, (offset_x, offset_y)):
    ...
    Merci de votre aide .

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Citation Envoyé par chris7522 Voir le message
    Est il possible de gérer les collisions entre ces 2 classes en utilisant quelque chose de ce genre :
    pygame est fait pour çà... après, il faut apprendre à l'utiliser et étudier des exemples comme celui-ci pour s'en inspirer ou comprendre comment ça fonctionne.

    note: votre code fonctionne ou pas... le cas échéant, poster quelque chose qui permettra de reproduire un problème est un préalable pour comprendre comment le corriger.

    - 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
    Je vous remercie de votre aide . J'ai beaucoup de lacune et ne maitrise pas le sujet , je vais donc étudier tout ca .

  4. #4
    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
    En fait ma question etait : est il possible d'utiliser ceci pour tester la collision entre une liste de sprite et un groupe de sprite ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for d in hero_list:
       for e in explose_group:
          offset_x = h.rect.x - e.rect.x
          offset_y = h.rect.y - e.rect.y
          if e.explose_mask.overlap(h.spaceship_mask, (offset_x, offset_y)):

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Citation Envoyé par chris7522 Voir le message
    En fait ma question etait : est il possible d'utiliser ceci pour tester la collision entre une liste de sprite et un groupe de sprite ?
    Ma réponse vous demandait de préciser si ça fonctionne ou pas... et, le cas échéant, de fournir un code plus complet pour reproduire le soucis constaté.

    Dit autrement, ça devrait pouvoir marcher suivant ce que fait le code que vous ne montrez pas.
    note: vous pouvez constater que dans l'exemple que je vous ai cité ils procèdent autrement (et que ça marche).

    Et si vous ne maîtrisez pas le sujet, il y a des tas de tutos et d'exemples à votre disposition. Il sera difficile de faire mieux en quelques lignes (vu le peu d'information que vous donnez).

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

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 530
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 530
    Par défaut
    pygame propose des fonctions de tests de collisions sur l'objet Rect (avec des listes de Rect en particulier) https://www.pygame.org/docs/ref/rect...hlight=collide

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par chris7522 Voir le message
    En fait ma question etait : est il possible d'utiliser ceci pour tester la collision entre une liste de sprite et un groupe de sprite ?
    Les objets Python peuvent parfois se mélanger. Exemple multiplier une liste par un int donnera n fois la liste.
    Mais parfois (et c'est généralement le plus souvent) ils ne le peuvent pas. Et quand c'est le cas, il faut alors convertir un des deux objets (ou même les deux) en objet commun.

    Exemple: je veux une collision entre deux chaines. Or seul le set contient l'opérateur de collision. Je transforme alors mes chaines en set.
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> a="abracadabra"
    >>> b="barbapapa"
    >>> set(a) & set(b)
    {'b', 'r', 'a'}

    Et si je veux le résultat en chaine, alors je le retransforme.
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> "".join(set(a) & set(b))
    'bra'
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    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
    Merci beaucoup pour ton aide
    Bon week-end a tous

Discussions similaires

  1. collision entre groupe de sprites (pygame)
    Par jean-pat dans le forum Programmation multimédia/Jeux
    Réponses: 8
    Dernier message: 17/09/2011, 16h22
  2. Gestion de collision entre BOX
    Par Darkantho dans le forum Mathématiques
    Réponses: 8
    Dernier message: 19/03/2011, 13h38
  3. Gestion de collisions entre objets mobiles?
    Par Benjilabu dans le forum Caml
    Réponses: 3
    Dernier message: 10/01/2011, 21h32
  4. collision entre un sprite d'une classe et un vector2d liste
    Par kate59 dans le forum Développement 2D, 3D et Jeux
    Réponses: 7
    Dernier message: 21/04/2008, 23h10
  5. Réponses: 4
    Dernier message: 25/09/2004, 09h58

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