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 :

Pygame : bug de position/problème avec les classes


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2017
    Messages : 23
    Par défaut Pygame : bug de position/problème avec les classes
    Bonjour à vous tous !!

    J'ai un problème que je n'arrive pas à résoudre :'(

    En faite, je suis en train de faire un jeu et j'essaye d'incorporer un système de déplacement pour les ennemies (comme ceux de mario qui font des aller-retour à l'infini).

    J'ai donc fais une classe pour les ennemis. Cependant, je n'arrive pas à modifier la position de l'ennemie en dehors de la classe..

    Voici ce que j'ai fais :

    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
    #COULEUR
    BLANC = (255,255,255)
    NOIR =  (  0, 0, 0)
     
    background = pygame.Surface(fenetre.get_size())
    img_ennemie = pygame.Surface((60,60))
    img_ennemie.fill(BLANC)
     
    class Enemy():
        """Classe permettant la gestion des enemis"""
     
        def __init__(self, image, posX, posY):
            """Constructeur de la classe Enemy"""
     
            self.image = image
            self.rect = self.image.get_rect()
            self.posX = posX
            self.rect.x = posX
            self.rect.y = posY
     
            #distanceTravel
            self.distanceXtravel = 0
            self.distanceYtravel = 0
     
        def distanceTravel(self, vitesse, distanceTravel):
            """Fonction permettant la gestion du travel de l'ennemi:
                    -distanceTravel : distance aller/retour que l'ennemi va faire (quand il va "rôder")"""
     
            self.distanceXtravel += vitesse
     
            self.rect.x =  (cos(self.distanceXtravel) * distanceTravel) + self.posX
     
        def update_ennemie(self):
            """Fonction permettant l'update de l'ennemie"""
     
            fenetre.blit(self.image,self.rect)
     
    ennemie = Enemy(img_ennemie, 150, 50)
    #Boucle événementielle
    continuer = True
    while continuer:
        clock = pygame.time.Clock()
        for event in pygame.event.get():
            if event.type == QUIT:
                    continuer = False
     
     
        ennemie.rect.x += 100 #j'ai l'impression que cette commande ne fait rien, même si je met à += 1000
            print(ennemie.rect.x)
     
        #Logique de jeu
     
        ennemie.distanceTravel(0.01,100)
        fenetre.blit(background, (0,0))
     
        #L'affichage du jeu
        ennemie.update_ennemie()
     
        #Rafraichissement
        pygame.display.flip()
        clock.tick(60)


    UN GRAND MERCI A VOUS !

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 058
    Par défaut
    Pourquoi n'y a-t-il pas une méthode représentant l'action déplacer dans votre classe ?

    Pour votre problème, vous n'utilisez pas la méthode move de l'objet Rect je pense... J'utilise pas pygame, mais la documentation semble claire.

  3. #3
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2017
    Messages : 23
    Par défaut
    Bonjour,

    Il y a bien une méthode de déplacement : distanceTravel.
    Mais j'ai compris mon erreur : je modifie ennemie.rect.x mais juste après j'écrase cette valeur en appliquant la méthode distanceTravel..

    J'ai juste à faire ennemie.posX += 1 plutôt que ennemie.rect.x += 1 et ça marche !

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 823
    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 823
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Pricex3 Voir le message
    J'ai juste à faire ennemie.posX += 1 plutôt que ennemie.rect.x += 1 et ça marche !
    Moui. Peut-être que ça marche mais que 15 instructions plus loin ça ne marchera plus. Après-tout, dans ton __init__ tu copies posX dans rect.x donc peut-être que c'est important que les deux valeurs soient égales. Ou alors peut-être que l'une des deux ne sert à rien.
    Bref généralement, on évite de toucher directement aux éléments internes de l'objet et on préfère passer par des méthodes dédiées...
    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]

Discussions similaires

  1. problème avec les classes abstraite avec C#
    Par takfa2008 dans le forum C#
    Réponses: 1
    Dernier message: 29/06/2009, 10h25
  2. Problème avec les classes et les méthodes abstract
    Par BOLARD dans le forum Langage
    Réponses: 5
    Dernier message: 22/09/2007, 20h27
  3. Problème avec les classes HttpWebRequest et HttpWebResponse sous C#
    Par zouzoulikou dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 14/08/2007, 01h46
  4. Problème avec les classes
    Par 30barrett40 dans le forum C++
    Réponses: 6
    Dernier message: 28/03/2007, 14h04
  5. [POO] PHP5 : Problème avec les classes
    Par fleur_de_rose dans le forum Langage
    Réponses: 9
    Dernier message: 06/05/2006, 19h09

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