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

Programmation multimédia/Jeux Python Discussion :

Problème collision pygame


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2022
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2022
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème collision pygame
    Bonjour à quiconque qui voudrait bien m'aider à résoudre mon problème . Alors voila je suis entrain de créer un jeu en python avec pygame et j'ai un problème , je n'arrive pas à créer les collisions , je ne comprend pas . Pourtant mon code marche bien , c'est à dire que mes deux éléments fonctionnent bien séparément (mon vaisseaux et les ennemie ce déplacent bien) . Mais je n'arrive pas à créer les collisions pourtant j'ai écumer plein de vidéo et de forum mais je suis bloqué .Je vous donne le code de cette version qui fonctionne , j'ai essayé de mettre une fonction pour détecter les collision mais je n'ai pas réussi . Merci de m'aider et m'expliquer ce qui ne va pas . Je pense que c'est surtout que de un je ne comprend pas comment transformer en .rect mon vaisseaux et de deux comment faire la collision . En premier c'est ma class jeu et mon deuxième ma class qui gère l'ennemie .Je vous met aussi a disposition les images pour tester vous même .

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    import pygame
    from enemie import Enemie
    import random
    import time
     
    ##class Player(pygame.sprite.Sprite):
    ##    def __init__(self):
    ##        self.img = pygame.image.load("vaisseaux.png")
    ####        self.img=pygame.transform.scale(self.img, (75, 50))
    ##        self.rect_img=self.img.get_rect()
    ##        self.rect.X=400
    ##        self.rect.Y=300
    ##
    ##    def gauche(self):
    ##        self.rect.X=self.rect.X-20
    ##    def droite(self):
    ##        self.posX=self.posX+20
    ##    def haut(self):
    ##        self.posY=self.posY-20
    ##    def bas(self):
    ##        self.posY=self.posY+20
     
    class jeu:
     
        def __init__(self):
            self.run = True
            self.posX=400
            self.posY=300
            self.img = pygame.image.load("vaisseaux.png")
            self.img=pygame.transform.scale(self.img, (75, 50))
            self.rect_img=self.img.get_rect()
            self.vie=1
            self.surf = pygame.display.set_mode((800,600))
            self.background=pygame.image.load("background2.png")
            self.background=pygame.transform.scale(self.background, (800, 600))
            self.clock=pygame.time.Clock()
            self.all_enemie=pygame.sprite.Group()
            self.pressed={}
            self.jeu=jeu
            self.colision1=self.all_enemie
            colision=[self.colision1]
            self.spawn(random.randint(1,15))
     
        def spawn(self,spipi):
            global enemie
    ##        self.nb_mob=1
    ##        for i in range(secs):
    ##            self.spipi=random.randint(1,15)
    ##            self.nb_mob+=1
    ##            time.sleep(secs)
     
    ##        if secs==1:
            for i in range(spipi):
                enemie=Enemie()
                self.all_enemie.add(enemie)
                spipi=random.randint(1,15)
     
    ##    def check_colision(self,surface,group):
    ##        return pygame.sprite.spritecollide(surface,group,False,pygame.sprite.collide_mask)
     
    ##    def mort(self,surf,group):
    ##        if self.jeu.check_colision(self,surface,group):
    ##            print(0)
     
     
        def start_and_end(self):
     
            while self.run :
                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        self.run = False
     
                if event.type==pygame.KEYDOWN:
     
                    if event.key == pygame.K_UP:
                        if 0<self.posY<=600:
                            self.posY=self.posY-20
    ##                        Player.haut()
                    elif event.key == pygame.K_DOWN and 0<=self.posY<540:
                            self.posY=self.posY+20
    ##                        Player.bas()
                    elif event.key == pygame.K_LEFT :
                        if 0<self.posX<=800:
                            self.posX=self.posX-20
    ##                    Player.gauche()
                    elif event.key == pygame.K_RIGHT and 0<=self.posX<720:
                        self.posX=self.posX+20
    ##                    Player.droite()
     
    ##            if self.nb_mob<=20:
    ##                self.spawn(1)
    ##                self.nb_mob-=random.randint(1,5)
     
    ##            if self.posX.collicelist(colision) and self.posY.collicelist(colision) ==-1:
    ##                print(0)
                self.surf.blit(self.background,(0,0))
                self.surf.blit(self.img,(self.posX,self.posY))
                self.all_enemie.draw(self.surf)
    ##            self.mort(self.img,self.all_enemie)
    ##            print(self.posX)
                for Enemie in self.all_enemie:
                    Enemie.mouvmt()
                    Enemie.respawn()
     
     
                self.clock.tick(30)
                pygame.display.flip()
     
        def globa(self):
            self.start_and_end()
     
    pygame.init()
    a=jeu()
    a.globa()
    pygame.quit()



    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
    import pygame
    import random
    class Enemie(pygame.sprite.Sprite):
        def __init__(self):
                super().__init__()
                self.velocity=5
                self.image=pygame.image.load("boule.png")
                self.rect=self.image.get_rect()
                list=[80,120,160,200,240,280,320,360,400,440,480,600,640,680]
                self.rect.x=random.choice(list)
                self.rect.y=-20
                self.bin=random.randint(0,2)
    ##            self.rect=self.rect.inflate(0,0)
        def mouvmt(self):
            for i in range(1):
                if self.bin==0:
                    self.rect.x=(self.rect.x+self.velocity)
                elif self.bin==1:
                    self.rect.x= (self.rect.x-self.velocity)
                elif self.bin==2:
                    pass
     
            if self.rect.x==-30:
                self.bin=0
            elif self.rect.x==745:
                self.bin=1
     
            self.rect.y=(self.rect.y+self.velocity)
     
        def respawn(self):
            if self.rect.y==600:
                self.rect.y=-20
    Nom : vaisseaux.png
Affichages : 623
Taille : 265,0 Ko

    Nom : boule.png
Affichages : 561
Taille : 619 octets

    Nom : background2.png
Affichages : 564
Taille : 109,3 Ko

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 952
    Points : 9 281
    Points
    9 281
    Par défaut
    hello,
    tu peux jeter un oeil ici

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    La prochaine fois, pour partager votre projet, confectionnez nous un zip que l'on puisse télécharger et qu'il suffit d'extraire pour le projet marche.
    Première remarque en terme de jouabilité: je ne peux pas appuyer sur deux touches (deux flèches) de mon clavier à la fois. Cela ne déplacera que dans une direction.

    Pour gérer cela, il faut mieux utiliser une série de if (pas de else, car c'est ce qui fait que cela bloque) et chaque if (pour chaque flèche) modifie un vecteur (un X et un Y) définissant la direction de déplacement.

    Il me semble que collideList est une fonction pour un rectangle ( https://www.pygame.org/docs/ref/rect...ct.collidelist ).
    Pouvez-vous nous montrer un code (qui s'exécute) et qui gère les collisions. Car là, nous avons un code avec plusieurs segments commentés et qui en l'état, ne semble même pas être exécutable.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. pygame : problème collisions
    Par mat238 dans le forum Programmation multimédia/Jeux
    Réponses: 4
    Dernier message: 21/05/2012, 01h24
  2. Actionscript 2.0 problème collision
    Par BoloG dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 10/05/2009, 20h50
  3. [problème] collisions environnement
    Par pspflashsystem dans le forum OpenGL
    Réponses: 1
    Dernier message: 04/04/2009, 14h58
  4. Problème collisions HitTest()
    Par Manumation dans le forum Flash
    Réponses: 6
    Dernier message: 08/06/2007, 13h04
  5. [C++] problème collision
    Par agrosjea dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 16/04/2007, 14h33

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