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

GUI Python Discussion :

Pygame les arcanes des collisions


Sujet :

GUI Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    étudient
    Inscrit en
    Août 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : étudient

    Informations forums :
    Inscription : Août 2013
    Messages : 5
    Par défaut Pygame les arcanes des collisions
    Bonjour à tous, je suis en train de faire un petit jeu avec pygame.
    mais voila, j'ai du mal à gerer les collisions, alors que jy suis presque.
    je suis sûr que certain d'entre vous connaissent pygame et je compte sur votre aide pour résoudre mon problème^^

    le problème :
    pygame pense que mon personnage est constamment en collision et donc, je ne peux pas le déplacer !

    voici mon code je compte sur vos réponses :
    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
    import pygame
    from pygame.locals import *
    from constantes import *
     
    pygame.init()
     
    #Ouverture de la fenêtre Pygame
    fenetre = pygame.display.set_mode((545, 416))
     
    #Personnalisation du jeu
    icone = pygame.image.load(image_icone)
    pygame.display.set_icon(icone)
    pygame.display.set_caption(titre_fenetre)
     
    #Chargement et collage du fond
    fond = pygame.image.load(image_accueil).convert()
    fenetre.blit(fond, (0,0))
    pygame.display.flip()
     
    mur1 = pygame.Rect(1, 1, 30, 416)
    mescollisions = [mur1]
     
    #son
    son = pygame.mixer.Sound(SAN_1)
    son.play()
     
    resterac = True
     
    class hero(pygame.sprite.Sprite):
        def __init__(self):
            self.image_face = pygame.image.load("images/perso_face.png").convert_alpha()
            self.image_left = pygame.image.load("images/perso_left.png").convert_alpha()
            self.image_right = pygame.image.load("images/perso_right.png").convert_alpha()
            self.image_back = pygame.image.load("images/perso_back.png").convert_alpha
            self.image = self.image_right
            self.position = pygame.Rect(85, 168, 27, 32,)
     
    hero = hero()
     
    while resterac:                        
        for event in pygame.event.get():
     
            if event.type == QUIT:
                resterac = False
     
            if event.type == KEYDOWN:
                if event.key == K_SPACE:
                    fond = pygame.image.load(T_a).convert()
                    fenetre.blit(fond, (0,0))
                    jeu = True
                    fenetre.blit(hero.image, hero.position)
                    pygame.key.set_repeat(1, 35)
     
                    pygame.display.flip()
     
                    #Boucle jeu
     
                    while jeu:
     
                        for event in pygame.event.get():
                            if event.type == QUIT:
                                jeu = False
                            if event.type == KEYDOWN:
                                if hero.position.collidelist(mescollisions) == -1:
                                    hero.position.x -= 1 #Il ne s'arrête pas mais recule d'un pixel
                                else:
     
                                    if event.key == K_w:
                                        hero.position.y += 10
                                        hero.image = hero.image_back
     
                                    elif event.key == K_s:
                                        hero.position.y -= 10
                                        hero.image = hero.image_face
     
                                    elif event.key == K_a:
                                        hero.position.x -= 10
                                        hero.image = hero.image_left
     
                                    elif event.key == K_d:
                                        hero.position.x += 10
                                        hero = hero.image_right
     
     
                        fenetre.blit(fond, (0,0))
                        fenetre.blit(hero.image, hero.position)
                        pygame.display.flip()

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    J'ai pas testé le code, mais à vue de nez, le personnage recule en permanence, non ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    étudient
    Inscrit en
    Août 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : étudient

    Informations forums :
    Inscription : Août 2013
    Messages : 5
    Par défaut
    Oui, mon personnage recule ne permanence

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    C'est normal, tu as codé que s'il n'y a pas de collision alors il faut reculer d'un pixel.

  5. #5
    Membre à l'essai
    Homme Profil pro
    étudient
    Inscrit en
    Août 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : étudient

    Informations forums :
    Inscription : Août 2013
    Messages : 5
    Par défaut
    Ok, donc je doit remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if hero.position.collidelist(mescollisions) == -1:
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if hero.position.collidelist(mescollisions) == 1:
    ?

    EDIT : je pense ne pas avoir juste car j'ai testé, et avec ça, dès que je déplace mon personnage j'ai une erreur

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Relis bien la doc de la méthode collidelist; ça retourne un indice s'il y a collision et -1 s'il n'y en a pas.

Discussions similaires

  1. Théorie des collisions : exemples de collisions dans les jeux
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 09/01/2014, 20h30
  2. Théorie des collisions : Optimisations avec les méthodes de partionnement de l'espace
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 28/12/2013, 19h58
  3. Réponses: 3
    Dernier message: 06/01/2012, 15h26
  4. Evitement des collisions en utilisant les boites englobantes
    Par eemii dans le forum Intelligence artificielle
    Réponses: 2
    Dernier message: 18/03/2010, 10h29
  5. Réponses: 2
    Dernier message: 22/07/2002, 18h02

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