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 de hit box


Sujet :

Programmation multimédia/Jeux Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Par défaut Problème de hit box
    bonjour je suis un option ISN et dans mon programme je voulais ajouter un petit jeu pygame pas de soucis a ce niveau la mon problème viens du jeu en effet tout semble bien marcher mais voici l'erreur: le but de mon jeu est de cliquer avec la souris sur un monstre citrouille pour marquer des point et de ne pas cliquer sur le chevalier mon problème est que j'ai beau cliqué n'importe où le jeu ne réagit pas. vous comprendrez alors ma gène voici mon code je ne vois pas ou pourrai être l'erreur pourriez vous m'aider s'il vous plait ou me redirigé vers un forum ou la question aurait déjà été traité ?
    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
    #importation des modules
    import pygame , math , random , time
    from pygame.locals import *
     
    pygame.init()
     
    #definition des différente couche
    fenetre = pygame.display.set_mode((480, 480))
    fond = pygame.image.load("image/background.png").convert_alpha()#arriere plan
    monstre = pygame.image.load("image/monstre.png").convert_alpha()#monstre en png 38x64
    hero1 = pygame.image.load("image/Blue_knight.png").convert_alpha()#chevalier en png 34x52
    hero2 = pygame.image.load("image/Purple_knight.png").convert_alpha()#chevalier en png 34x52
    hero3 = pygame.image.load("image/Red_knight.png").convert_alpha()#chevalier en png 34x52
    plan = pygame.image.load("image/plan.png").convert_alpha()#plan a mettre par dessus le plan pour faire deux couches
     
    afficher_scoreNEGA = pygame.image.load("imageNEGA.png").convert_alpha() #image en forme de moins
    afficher_score0 = pygame.image.load("image0.png").convert_alpha() #image en forme de 0
    afficher_score1 = pygame.image.load("image1.png").convert_alpha() #image en forme de 1
    afficher_score2 = pygame.image.load("image2.png").convert_alpha() #image en forme de 2
    afficher_score3 = pygame.image.load("image3.png").convert_alpha() #image en forme de 3
    afficher_score4 = pygame.image.load("image4.png").convert_alpha() #image en forme de 4
    afficher_score5 = pygame.image.load("image5.png").convert_alpha() #image en forme de 5
     
    hero = [hero1, hero2,hero3]
     
    son = pygame.mixer.Sound("son/reussi.wav") #son pour quand on touche le monstre
     
    fail = pygame.mixer.Sound("son/rater.wav") #son pour quand on touche le chevalier
     
    intro = pygame.image.load("intro.png").convert() #image qui va defiler pour raconter une histoire 480x960
     
    continuer = 1
     
    score = 0
     
    timer = 2 #je predefinis un timer
     
    # boucle pour faire defiler l'image d'introduction
    a = 0
    while a >= -480:
        fenetre.blit(intro, (0,a))
        time.sleep(0.01)
        a = a-1
     
    # boucle principale
    while score <= 5 and continuer == 1:
     
        #Chargement du fond
        fenetre.blit(fond, (0,0))
     
        #Chargement du monstre (le monstre fais 38 par 64)
        x = random.randint(0+38,480-38)
        y = random.randint(0+64,480-64)
     
        color = random.choice(hero) #couleur du hero choisi aléatoirement
     
        fenetre.blit(monstre,(x,y)) #faire apparaitre le monstre apres le plan pour qu'il ce retrouve entre deux plan
     
        w = random.randint(0+34,480-44)
        z = random.randint(0+52,480-52)
     
        fenetre.blit(color,(w,z)) #faire apparaitre le hero apres le plan pour qu'il ce retrouve entre deux plan
     
        fenetre.blit(plan, (0,0)) #rajouter le plan par dessus pour enfermer entre deux plan les personage
     
    #affichage des scores
        if score == 0:
            fenetre.blit(afficher_score0, (420,5))
            pygame.display.flip()
        elif score == 1 or -1:
            fenetre.blit(afficher_score1, (420,5))
            pygame.display.flip()
        elif score == 2 or -2:
            fenetre.blit(afficher_score2, (420,5))
            pygame.display.flip()
        elif score == 3 or -3:
            fenetre.blit(afficher_score3, (420,5))
            pygame.display.flip()
        elif score == 4 or -4:
            fenetre.blit(afficher_score4, (420,5))
            pygame.display.flip()
        elif score == 5 or -5:
            fenetre.blit(afficher_score5, (420,5))
            pygame.display.flip()
            time.sleep(2)
            score = 6
        if score <= -1:
            fenetre.blit(afficher_scoreNEGA, (400,5))
            pygame.display.flip()
     
        for event in pygame.event.get():
     
            pygame.display.flip()
     
            if event.type == MOUSEBUTTONDOWN and event.button == 1 and event.pos[0] >= x and event.pos[1] >= y and event.pos[0] <= x+38 and event.pos[1] <= y+64 : #action si on touche le monstre
                son.play()
                score = score + 1
                pygame.display.flip()
     
            if event.type == MOUSEBUTTONDOWN and event.button == 1 and event.pos[0] >= w and event.pos[1] >= z and event.pos[0] <= w+34 and event.pos[1] <= z+52 : #action si on touche le hero
                fail.play()
                score = score - 1
                pygame.display.flip()
     
            if event.type == KEYDOWN and event.key == K_F1:
                continuer = 0
                score = 6
     
        pygame.display.flip()
        time.sleep(timer)
     
    pygame.quit()
    Pièce jointe 379893

  2. #2
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut.

    Pour déboguer, tu devrais décomposer chacune des conditions concernant le clic, en plusieurs conditions affichant chacune un print afin d'identifier celle n'étant pas vérifiée.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if event.type == MOUSEBUTTONDOWN :
        print(1)
        if event.button == 1 :
            print(2)
            if event.pos[0] >= x :
                print(3)
                if event.pos[1] >= y :
                    print(4)
                    if event.pos[0] <= x+38 :
                        print(5)
                        if event.pos[1] <= y+64 :
                            print(6)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Par défaut
    merci je viens d'essayer le problème est donc que a chaque essaie le clique gauche est détecter dans les deux cas le mouse down aussi mais jamais ou alors a moitié les conditions <= x+38 etc... je pense qu'il me faudra un moyen de récupérer les cordonner de la souris autrement et de les comparé a ceux de l'image mais je ne connais pas de commande comme ca

  4. #4
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut.

    blit retourne un Rect pygame, et c'est avec ce rectangle que tu dois travailler pour vérifier si le clic de ta souris se situe à l'intérieur de ce rectangle, et tu peux faire cela à l'aide des méthodes Rect.collidepoint ou Rect.colliderect.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Par défaut
    ok je pense avoir compris mais alors comment récupéré mon blit le définissant comme un rectangle dans la fonction .collidepoint ici -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if event.type == MOUSEBUTTONDOWN and event.button == 1 and ##ajouter le collidepoint
    bonjour j'ai tenter de régler le problème en utilisant la fonction collidepoint mais encore une fois je ne comprend pas pourquoi ça ne marche pas j'ai essayer avec une version très réduite (genre un fond vide et une image fixe) et ça marchais plutôt bien mais dès que je commence a agrandir mon code avec l'affichage des score etc plus les position aléatoire il ne vérifie pas si la souris entre en collision avec l'image du monstre/héro, comment faire ?
    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
    #importation des modules
    import pygame , math , random , time
    from pygame.locals import *
     
    pygame.init()
     
    #definition des différente couche
    fenetre = pygame.display.set_mode((480, 480))
    fond = pygame.image.load("image/background.png").convert_alpha()#arriere plan
    monstre = pygame.image.load("image/monstre.png").convert_alpha()#monstre en png 38x64
    hero1 = pygame.image.load("image/Blue_knight.png").convert_alpha()#chevalier en png 34x52
    hero2 = pygame.image.load("image/Purple_knight.png").convert_alpha()#chevalier en png 34x52
    hero3 = pygame.image.load("image/Red_knight.png").convert_alpha()#chevalier en png 34x52
    plan = pygame.image.load("image/plan.png").convert_alpha()#plan a mettre par dessus le plan pour faire deux couches
     
    afficher_scoreNEGA = pygame.image.load("imageNEGA.png").convert_alpha() #image en forme de moins
    afficher_score0 = pygame.image.load("image0.png").convert_alpha() #image en forme de 0
    afficher_score1 = pygame.image.load("image1.png").convert_alpha() #image en forme de 1
    afficher_score2 = pygame.image.load("image2.png").convert_alpha() #image en forme de 2
    afficher_score3 = pygame.image.load("image3.png").convert_alpha() #image en forme de 3
    afficher_score4 = pygame.image.load("image4.png").convert_alpha() #image en forme de 4
    afficher_score5 = pygame.image.load("image5.png").convert_alpha() #image en forme de 5
     
    hero = [hero1, hero2,hero3]
     
    son = pygame.mixer.Sound("son/reussi.wav") #son pour quand on touche le monstre
     
    fail = pygame.mixer.Sound("son/rater.wav") #son pour quand on touche le chevalier
     
    intro = pygame.image.load("intro.png").convert() #image qui va defiler pour raconter une histoire 480x960
     
    continuer = 1
     
    score = 0
     
    timer = 3 #je predefinis un timer
     
    # boucle pour faire defiler l'image d'introduction
    a = 0
    while a >= -480:
        fenetre.blit(intro, (0,a))
        time.sleep(0.01)
        a = a-1
     
    # boucle principale
    while score <= 5 and continuer == 1:
     
        #Chargement du fond
        fenetre.blit(fond, (0,0))
     
        #Chargement du monstre (le monstre fais 38 par 64)
        x = random.randint(38,442)
        y = random.randint(64,416)
        rect_monstre= fenetre.blit(monstre,(x,y)) #créé une variable définissant le rectangle ou se situe le monstre
     
        w = random.randint(34,446)
        z = random.randint(52,428)
        color = random.choice(hero) #couleur du hero choisi aléatoirement
        rect_hero= fenetre.blit(color,(w,z))#créé une variable définissant le rectangle ou se situe le héro
     
        fenetre.blit(plan, (0,0)) #rajouter le plan par dessus pour enfermer entre deux plan les personage
     
        #affichage des scores
        if score == 0:
            fenetre.blit(afficher_score0, (420,5))
        if score == 1 or -1:
            fenetre.blit(afficher_score1, (420,5))
        elif score == 2 or -2:
            fenetre.blit(afficher_score2, (420,5))
        elif score == 3 or -3:
            fenetre.blit(afficher_score3, (420,5))
        elif score == 4 or -4:
            fenetre.blit(afficher_score4, (420,5))
        elif score == 5 or -5:
            fenetre.blit(afficher_score5, (420,5))
            time.sleep(2)
            score = 6
        if score <= -1:
            fenetre.blit(afficher_scoreNEGA, (400,5))
     
        pos_souris= pygame.mouse.get_pos()
     
        for event in pygame.event.get():
     
            if event.type == MOUSEBUTTONDOWN and event.button == 1 and rect_monstre.collidepoint(pos_souris): #action si on touche le monstre
                son.play()
                score = score + 1
                print("monstre",score)
                pygame.display.flip()
     
            if event.type == MOUSEBUTTONDOWN and event.button == 1 and rect_hero.collidepoint(pos_souris): #action si on touche le hero
                fail.play()
                score = score - 1
                print("hero",score)
                pygame.display.flip()
     
            if event.type == KEYDOWN and event.key == K_F1:
                continuer = 0
                score = 6
     
        pygame.display.flip()
        time.sleep(timer)
     
    pygame.quit()

  6. #6
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Comme ça, je vois pas trop où est le problème, peux-tu fournir une archive zip de ton application ?

Discussions similaires

  1. [XHTML 1.0] Problème de text box caché
    Par ne2sbeal dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 05/03/2010, 08h43
  2. Réponses: 1
    Dernier message: 04/09/2009, 14h30
  3. Problème de combo box avec additem
    Par Mariquiqui dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/04/2008, 19h25
  4. problème avec Virtual Box
    Par belaggoun2000 dans le forum Applications et environnements graphiques
    Réponses: 6
    Dernier message: 19/06/2007, 11h09
  5. VBA Importation problème d'INUPUT BOX
    Par snoopy69 dans le forum Access
    Réponses: 8
    Dernier message: 21/12/2004, 16h36

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