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 :

Pygame trace lors d'un déplacement [Python 3.X]


Sujet :

Programmation multimédia/Jeux Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Tarn (Midi Pyrénées)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 621
    Par défaut Pygame trace lors d'un déplacement
    Bonjour à tous,

    Je débute avec Pygame et je rencontre un problème avec le déplacement d'un sprite qui laisse une trace.
    Si quelqu'un à une idée ? Je vous remercie.
    Avec mon code je vous joins mes 2 images.
    Voici mon code :

    Ma classe principale jeu.py

    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
     
    # Référencement de la librairie
    from pathlib import Path
    from turtle import Screen
    import pygame
     
    # Importation des fichiers "joueur" et "mur" que nous avons créés
    from joueur import Joueur
    from mur import Mur
    from labyrinthe import Labyrinthe
     
    labyrinthe_tab = [
    [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ],
    [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1 ],
    [ 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1 ],
    [ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1 ],
    [ 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1 ],
    [ 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 ],
    [ 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1 ],
    [ 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1 ],
    [ 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1 ],
    [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ],
    [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
    ]
     
    # Vitesse de déplacement
    speed = 64
     
    # Couleur de fond du jeu
    background_color = (255,255,255)
     
    # Initialisation de la librairie
    pygame.init()
     
    # Définition de la résolution de la fenêtre 1280 x 720
    ecran = pygame.display.set_mode((1280,720))
    # Définition de la couleur de fond de la fenêtre
    ecran.fill(background_color)
     
    # Modifications apportées à la V2
    joueur = Joueur()
    mur = Mur()
     
    # Création du groupe de sprites
    sprites_group = pygame.sprite.Group()
    sprites_group.add(joueur) # mur a été retiré du groupe
     
    # Groupe de sprites du labyrinthe
    laby_group = pygame.sprite.Group()
    # Instanciation du labyrinthe
    labyrinthe = Labyrinthe(labyrinthe_tab, 64, 64)
     
    # Initialisation d'un booléen pour la boucle du jeu
    running = True
     
    # Boucle infinie
    while running :
        # Capture de la touche ESC pour quitter la boucle du jeu
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE :
                running = False
     
        # Modification de la V4
        # Capture des touches de contrôles du joueur
        keys = pygame.key.get_pressed()
        if keys[pygame.K_q]:
            joueur.bouge_gauche(speed)
        if keys[pygame.K_z]:
            joueur.bouge_haut(speed)
        if keys[pygame.K_s]:
            joueur.bouge_bas(speed)
        if keys[pygame.K_d]:
            joueur.bouge_droite(speed)
     
        # Lecture et affichage du labyrinthe
        labyrinthe.lire_et_affichage(laby_group)
        laby_group.draw(ecran)
     
        # Les opérations opérées sur les objets du jeu
        sprites_group.update()
        # Affichages des objets du groupe sprites
        sprites_group.draw(ecran)
     
        # Mise à jour de l'affichage 
        pygame.display.flip()
     
    # Sortie du programme
    pygame.quit()
    Ma classe joueur.py
    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
     
    from typing import Any
    import pygame
    from pathlib import Path
     
    class Joueur(pygame.sprite.Sprite):
        def __init__(self):
            # Mon dossier de travail
            dirLocal = Path(__file__).absolute().parent
     
            pygame.sprite.Sprite.__init__(self)
            self.image = pygame.image.load(dirLocal / 'images/joueur.png').convert_alpha()
            self.rect = self.image.get_rect()
            self.rect.x = 512
            self.rect.y = 512
     
        def update(self) :
            pass
     
        # Déplacement vers la gauche
        def bouge_gauche(self, speed):
            self.rect.x -= speed
     
        # Déplacement vers la droite
        def bouge_droite(self, speed):
            self.rect.x += speed
     
        # Déplacement vers le haut
        def bouge_haut(self, speed):
            self.rect.y -= speed
     
        # Déplacement vers le bas
        def bouge_bas(self, speed):
            self.rect.y += speed
    Ma classe labyrinthe.py
    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
     
    from mur import Mur
     
    class Labyrinthe():
        # Constructeur de la classe Labyrinthe
        # Les paramètres attendus sont :
        # La structure du labyrinthe
        # La largeur et la hauteur d'un bloc du mur
        def __init__(self, labyrinthe_struct, cell_largeur, cell_hauteur):
            self.labyrinthe = labyrinthe_struct
            self.cell_largeur = cell_largeur
            self.cell_hauteur = cell_hauteur
     
        # Lecture de la structure du labyrinthe et remplacement des 1 par des blocs de mur
        def lire_et_affichage(self, groupe_sprite_mur):
            x_pos = 0
            y_pos = 0
            # La variable y correspond à chaque ligne de la structure du tableau
            # La variable x correspond à chaque colonne de la structure du tableau
            for y in range(len(self.labyrinthe)):
                x_pos = 0
                for x in range(len(self.labyrinthe[0])):
                    # Si nous rencontrons un 1 dans notre structure du labyrinthe
                    # Nous créons une instance de l'objet mur
                    if self.labyrinthe[y][x] == 1 :
                        mur = Mur()
                        mur.rect.x = x_pos
                        mur.rect.y = y_pos
                        groupe_sprite_mur.add(mur)
                        x_pos += self.cell_largeur
                    else :
                         x_pos += self.cell_largeur
                y_pos += self.cell_hauteur
    Et ma classe mur.py
    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
     
    import pygame
    from pathlib import Path
     
    class Mur(pygame.sprite.Sprite):
        def __init__(self):
            # Mon dossier de travail
            dirLocal = Path(__file__).absolute().parent
     
            pygame.sprite.Sprite.__init__(self)
            self.image = pygame.image.load(dirLocal / 'images/mur.png').convert_alpha()
            self.rect = self.image.get_rect()
            self.rect.x = 600
            self.rect.y = 300
     
        def update(self) :
            pass[ATTACH=CONFIG]658307[/ATTACH][ATTACH=CONFIG]658308[/ATTACH]

  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
    Il me semble que tu n'effaces pas l'écran entre deux affichages.

  3. #3
    Membre éclairé Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Tarn (Midi Pyrénées)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 621
    Par défaut
    Bonjour,
    Merci pour l'information mais je ne vois pas trop comment faire.
    Pourriez-vous me donner des informations complémentaires ?
    Je vous remercie

  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
    Par exemple en plaçant ecran.fill(background_color) dans la boucle while running.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/04/2021, 13h25
  2. [Pygame]Evénement lors d'un clic sur une image
    Par Dev-DK dans le forum Programmation multimédia/Jeux
    Réponses: 1
    Dernier message: 19/02/2015, 21h41
  3. [Log4j] Date de la trace lors de l'insertion en base
    Par Kihmé Xs dans le forum Logging
    Réponses: 6
    Dernier message: 17/10/2012, 18h11
  4. Réponses: 0
    Dernier message: 12/10/2010, 16h10
  5. Réponses: 6
    Dernier message: 06/07/2006, 18h44

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