Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pygame et arrière plan

Il y aurai une limite ?

Sujet résolu
    16 février 2013 à 0:34:27

    Bonjour à tous,

    Un ami et moi-même utilisons en ce moment Pygame pour créer un simple line runner (un personnage qui cours sur une line en sautant au dessus d'obstacles).

    Or nous avions décidé de mettre un très grande image de fond et de la faire défiler. Le problème est justement ici !
    Lorsque l'on met une image de 30 000 x 500px Pygame nous dit "Out of memory" ou quelque chose dans le genre. Et lorsque nous avons découpé l'image en 5000x500 ... notre programme bug.

    Il y a-t-il une limitation ? La connaissez vous ? 

    • Partager sur Facebook
    • Partager sur Twitter

    Site personnel : Julien Gidel - AutoMatePHPresentation

      16 février 2013 à 10:29:03

      c'est à dire, bug ?
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        16 février 2013 à 14:10:15

        Alors, pour le "bug", ce n'est pas vraiment un bug, c'est qu'on à l'impression que seul le personnage est "bliter".

        Un screenshot vaut mieux qu'un long discours !

        Mais avant je m'explique : nous faisons défiler une image grâce à une boucle while et la position de l'image en x qui va être égale à la position - 1 (changeable selon la vitesse que l'on veut). Nous avons aussi un script de saut qui va "blit" le personnage à certaines coordonnées mais cette boucle fait aussi défiler le fond.

        Hors à la fin de l'image, lorsque je saute, voici ce que ça me donne : seul le personnage à l'air "blit". Est-ce dû au fait que se soit la "fin" de l'image. Et combien de Kio ou Mio, Pygame supporte à l'ouverture d'une image ?

        SCREENSHOT : Le personnage de test est ici en rouge. L'image est terminé (il n'y a plus de décors ducoup)

        dfszef

        Je pensais que c'etait dû au faite que vu qu'il n'y avais plus de pixels à faire défiler, l'image de fond ne se blitai plus et ducoup, le script n'affichait que le personnage. Vu que l'image de fond n'est plus mise à jours, on voit le personnage à toutes les positions qu'il à prises ?

        • Partager sur Facebook
        • Partager sur Twitter

        Site personnel : Julien Gidel - AutoMatePHPresentation

          16 février 2013 à 17:04:55

          30 000 x 500px

          30 000 x 500 x 3 octets -> tes données font au moins 45 Mio en RAM, juste pour une image, tu m'étonnes que Python n'apprécie pas, c'est la place que prend mon OS + mon gestionnaire de fenêtre pour faire tourner une session. :D

          Tu ferais mieux d'employer une autre technique, AMHA.

          Pygame nous dit "Out of memory" ou quelque chose dans le genre.

          Il te dit QUOI, précisément ?

          Enfin, je pense que Pygame n'est pas un bon choix pour le jeu que tu veux faire : d'après ce que tu décris, c'est le décor entier qui scrolle alors que ton personnage reste globalement fixe. Tu risques de vite tomber sur des problèmes de performances : la SDL n'est vraiment pas efficace pour raffraîchir tout l'écran à chaque frame. Tu devrais plutôt te pencher sur une bibliothèque basée sur OpenGL, comme PySFML.

          -
          Edité par nohar 16 février 2013 à 17:22:47

          • Partager sur Facebook
          • Partager sur Twitter
          Zeste de Savoir, le site qui en a dans le citron !
            16 février 2013 à 23:09:55

            s'il n'y a plus de background pour effacer le perso, forcement les blits cumulent ...

            ensuite contrairement à nohar, je pense que la SDL supportera bien une 50ene de FPS.

            finalement, une image comme background géant c'est faisable mais pas la meilleur méthode amha.

            • Partager sur Facebook
            • Partager sur Twitter

            Python c'est bon, mangez-en. 

              17 février 2013 à 17:41:37

              Merci pour vos réponses, ça confirme en effet ce que je pensais. Et nohar, il nous met juste "Out of memory". Ca doit venir de ce que tu précises juste au dessus :)

              On tiens à utiliser Pygame justement, car nous l'avons malheureusement fixé dans notre cahier des charges qui n'est maintenant plus changeable :X. On va se débrouiller pour faire plusieurs images que l'on va mettre à la suite, ça fera long et moche, mais nous avons que ce choix.

              • Partager sur Facebook
              • Partager sur Twitter

              Site personnel : Julien Gidel - AutoMatePHPresentation

                17 février 2013 à 22:47:03

                bha, suffit de précharger les images les une à la suite des autres durant le jeu en feintant un peu(genre aux checkpoint) à cause des temps d'accès au disque ...
                • Partager sur Facebook
                • Partager sur Twitter

                Python c'est bon, mangez-en. 

                  18 février 2013 à 0:09:02

                  C'est ce qu'on pensais faire justement ! :)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Site personnel : Julien Gidel - AutoMatePHPresentation

                    18 février 2013 à 10:20:56

                    jule04 a écrit:

                    Merci pour vos réponses, ça confirme en effet ce que je pensais. Et nohar, il nous met juste "Out of memory". Ca doit venir de ce que tu précises juste au dessus :)

                    Copie-colle l'exception complète, avec le traceback STP. Sinon, on ne sait pas qui dit "Out of memory".

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Zeste de Savoir, le site qui en a dans le citron !
                      18 février 2013 à 11:30:52

                      jule04 a écrit:

                      C'est ce qu'on pensais faire justement ! :)


                      hum .... et vous allez rentrer tous les obstacles à la main pour les faire correspondre à l'image ?

                      on peut voir l'image quelque part ?

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Python c'est bon, mangez-en. 

                        18 février 2013 à 14:56:16

                        Non les obstacles seront mit à certains endroit par moi même sur l'image de fond. J'aurai juste à dire au programme "A tel pixel, si l'image du personnage touche entre tant et tant, il a perdu !" et ce en x et y. C’est facile de repérer avec photoshop là où tu places les obstacles et de combien sur combien tu les fait. Donc là ne sera pas le soucis à mon avis :)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Site personnel : Julien Gidel - AutoMatePHPresentation

                          18 février 2013 à 16:46:02

                          c'est bien ce que je dis.

                          t'aurais pas lien vers quoi ressemblera le jeu ?

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Python c'est bon, mangez-en. 

                            19 février 2013 à 0:30:48

                            Pourquoi ne pas faire un fond fixe (à la rigueur, l'utilisateur pourrais choisir le fond du niveau) puis se contenter de déplacer uniquement les obstacles ?

                            Comme ça plus de problème au niveau de la mémoire, seul le fond, le personnage ainsi que les différents obstacles seront chargés en mémoire.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              19 février 2013 à 20:08:28

                              Josmiley, j'en ai bien un, qui sont les premiers tests du jeu.

                              http://www.youtube.com/watch?v=UKxd9ngnSmc
                              C'est une petite vidéo youtube que j'ai fais sans prétention bien sûr, mais juste pour pouvoir montrer "au jour le jour" à mes camarades qui s'y intéressent.

                              On voit un peu à quoi peu ressembler la chose. Après j'ai un autre lien qui viens d'un forum que j'ai créer mais qui pour le moment sert d'aide aux personnes de ma classe qui en ont besoin :
                              http://python-fr.1fr1.net/t27-line-runner
                              Tu as là tous les principes etc du jeu, si tu veux voir. Mais notre problème est simplement le fond, rien d'autre. Maintenant on pense faire un blit à chaque fois.

                              @Epychoc : Je me doit de répondre "non" même si la suggestion est très pertinente. Mais nous voulons un jeu court avec une petite mécanique assez cool. C’est juste un projet. Les professeurs veulent simplement voir ce dont nous sommes capable, pas voir si on sait développer un jeu entier. C’est pour ça que nous nous permettons de faire un fond qui défile : pour un jeu attrayant qui ne dur presque qu'une minute mais qui nous permet de bien voir ce que nous avons cherché à faire. :)

                              -
                              Edité par jule04 19 février 2013 à 20:09:42

                              • Partager sur Facebook
                              • Partager sur Twitter

                              Site personnel : Julien Gidel - AutoMatePHPresentation

                              Pygame et arrière plan

                              × 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