Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de rect sous Pygame...

Une erreur Pygame avec la propriété rect

Sujet résolu
    11 février 2016 à 22:04:50

    Bonsoir chers amis développeurs et codeurs :)

    Je suis depuis plusieurs heures face à un problème dont je n'arrive plus à me sortir...
    Pour vous expliquer simplement, je suis en train de développer un jeu, et dans ce jeu j'ai besoin de gérer les collisions, ce qui semble quelque chose de vraiment basique... Pour information, j'utilise la bibliothèque Pygame dans le développement de jeu.

    Pour cela, je me suis rendu sur internet, pour savoir si Pygame ne possédait pas des propriétés dans ce genre. J'ai trouvé mon bonheur avec une propriété tirée tout droit de la documentation Pygame :

    [rect1].colliderect([rect2])
    #Ici, on regarde si [rect1] est en collision avec [rect2]

    Donc tout content, je rentre ce code en remplaçant [rect1] et [rect2] par deux rectangles que je veux tester dans mon jeu.
    Le jeu se lance, tous les sprites sont placés, Mais dès que je lance une action sur le programme (ex : bouger mon personnage), là le jeu crash et la console Python me renvoi cette erreur :

    Traceback (most recent call last):
      File "E:\Projet\espace.py", line 76, in <module>
        if perso.collide_rect(mescollisions) :
    AttributeError: 'pygame.Surface' object has no attribute 'colliderect'

    Donc je regarde sur internet. Je vois que certaines personnes proposent d'autres codes, comme :

    [rect1].collide_rect([rect1]) 
    #ou encore : 
    pygame.sprite.collide([rect1], [rect2])

    Mais aucun ne fonctionne...

    J'avais déjà utilisé le principe de la reconnaissance de rect avec un clic sur une zone pour un menu (cliquer sur le bouton jouer lance le jeu, etc...) et aucun problème. J'ai toujours la même erreur qu'en haut, quelles que soient mes lignes de code...

    Je commence vraiment à désespérer, et ce n'est pas faute d'avoir cherché...

    J'en appelle à l'aide d'éventuels bienfaiteurs ^-^

    Cordialement, et merci d'avance !

    Lyro



    • Partager sur Facebook
    • Partager sur Twitter

    🚀 Software Engineer | https://lyro.fr

      11 février 2016 à 22:29:59

      Salut,

      As-tu vérifié la version de pygame que tu possèdes ? 

      Tente sinon de réinstaller pygame.

      • Partager sur Facebook
      • Partager sur Twitter
        11 février 2016 à 22:32:18

        Salut !

        J'utilise Python dans le cadre d'un projet au lycée, et ils nous ont fournit comme support de travail un Software de développement préfait, EduPython. Python y est en v3.2.

        Je ne sais pas si je peux ré-installer Pygame sous ce software. Je vais essayer !

        Merci pour ta réponse !

        Cordialement,
        Lyro

        • Partager sur Facebook
        • Partager sur Twitter

        🚀 Software Engineer | https://lyro.fr

          11 février 2016 à 23:17:54

          L'erreur c'est juste que perso est un objet de la classe Surface et non de la classe Rect. C'est cette dernière qui possède la méthode colliderect. De mémoire, tu peux récupérer le Rect associé à ta Surface soit grâce à la méthode blit (qui renvoie un Rect) soit directement avec la méthode get_rect de Surface ^^
          • Partager sur Facebook
          • Partager sur Twitter
          Précepte: Le mieux est l'ennemi du bien
            12 février 2016 à 22:43:46

            @Olygrim Merci beaucoup, c'est effectivement un problème de nature de la variable !

            Pour ceux qui rencontreraient mon problème, voici la solution :

            perso = pygame.image.load("Images/vaisseau1_right.png").convert_alpha() 
            position_perso = pygame.Rect((10,360), (52,52))
            #Ici, perso est l'image du personnage, et position_perso est le rect associé.
            
            mescollisions = [position_asteroide1, position_asteroide2, position_asteroide3, position_asteroide4, position_asteroide5]
            #on stocke dans mescollisions les différents objets qu'on veut rendre solides. 
            
            if position_perso.collidelist(mescollisions) :
            #Ce if test si le rect du perso est en contact avec un des rect de mescollisions

            Voilà ! :) Merci encore pour toutes vos réponses, sujet clos !

            • Partager sur Facebook
            • Partager sur Twitter

            🚀 Software Engineer | https://lyro.fr

            Problème de rect sous Pygame...

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown