Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pygames collisions de sprites

Sujet résolu
    2 mars 2013 à 0:29:54

    Bonjour :)

    Je suis en train de coder un jeu en python à l'aide de pygame. C'est un jeu en 2D vu de dessus (à la pokémon). Le héros se déplace mais j'aimerais faire en sorte qu'il ne puisse pas rentrer dans les arbres etc. Je suis donc à la recherche d'une fonction qui me donne le nombre de sprite appliqués à un point (x,y) de la fenetre ou bien qui me fournisse une liste de ces sprites. J'ai cherché sur google mais je ne comprends pas trop les groupes de sprites etc, si quelqu'un pouvait m'expliquer en détails ce serait sympa, merci d'avance :)

    • Partager sur Facebook
    • Partager sur Twitter
      2 mars 2013 à 1:03:52

      perso je n'ai jamais utilisé le module sprite, je créée ma propre class de sprites qui ne sont en fait rien d'autre que des rectangles.

      donc si tu as utilisé le module sprite je ne peux pas t'aider; sinon, dis-moi comment tu as défini les arbres ?

      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        2 mars 2013 à 11:37:25

        Je n'ai pas utilisé le module sprite justement mais je cherche à l'utiliser. Je comprends pas trop ta question sur les arbres ?
        • Partager sur Facebook
        • Partager sur Twitter
          2 mars 2013 à 22:58:48

          "C'est un jeu en 2D vu de dessus (à la pokémon)."

          c'est genre une map de carrés ?

          si oui, dans ce cas, nul besoin de tester les collisions, il faut juste vérifier si la case est occupée, non ?

          • Partager sur Facebook
          • Partager sur Twitter

          Python c'est bon, mangez-en. 

            3 mars 2013 à 0:56:45

            Oui mais comment faire ?
            • Partager sur Facebook
            • Partager sur Twitter
              4 mars 2013 à 11:46:40

              toi seul le sais puisque c'est toi qui a "posé" les arbres à telle où telle coordonnées.

              faudrait un .zip de ton projet.

              -
              Edité par josmiley 4 mars 2013 à 11:47:21

              • Partager sur Facebook
              • Partager sur Twitter

              Python c'est bon, mangez-en. 

                4 mars 2013 à 21:41:29

                def gen(fichier):
                    x=y=0
                    with open(fichier, "r") as fichier:
                        for ligne in fichier:
                            for a in range (len(ligne)):
                                if ligne[a]=='a':
                                    fenetre.blit(Tree,(x,y))
                                if ligne[a]=='r':
                                    fenetre.blit(Rock,(x,y))
                                x+=32
                            x=0
                            y+=32
                    pygame.display.flip()
                



                Voilà comment je génère la map. J'ai un fichier lvl comme ça :

                ooooooooooooooorrrrr
                oooaooaaoooooooooorr
                ooaaoaooooooaoooooor
                oooaaooooooooroooooo
                oooooooooaoooorooooo
                oorooooooooooooaoooo
                ooooaooooooooooooaoo
                ooaooooooooooooooooo
                oooooooaoooroaoooooo
                oaoooooaoooooooooooo
                oooooooooooaooooaooo
                ooaoooooooooaooorooo
                oooaooooooooooooaaoo
                ooorroooaaoooooooooo
                ooooooooooooooaooooo
                • Partager sur Facebook
                • Partager sur Twitter
                  4 mars 2013 à 22:48:27

                  donc ton perso est à une position x,y, tu calcules ses coordonnées dans la map et tu regardes s'il y a un 'r' à cet endroit.

                  ex:

                  le perso est à 256,416

                  dans la map ça donne 256/32,416/32 soit 8,13

                  bon là ça tombe sur un 'a'

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Python c'est bon, mangez-en. 

                    4 mars 2013 à 23:41:22

                    Ouaip je vois l'idée, mais comment je fais pour checker si le x-ème caractère de la y-ème ligne est tel ou tel sprite ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 mars 2013 à 0:54:20

                      parce que tu as normalement gardé la variable dans laquelle tu as stocké ton fichier lvl, il suffit de regarder dedans.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Python c'est bon, mangez-en. 

                        5 mars 2013 à 17:38:57

                        Je sais mais je ne sais pas comment analyser un seul caractère du fichier, pour la génération c'est simple je les fais tous défiler mais pour n'en prendre qu'un comment faire ? Par exemple comment s'y prendre pour savoir si le 5e caractère de la 12e ligne est un 'o' ou un autre ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          5 mars 2013 à 18:06:03

                          comment lis-tu le fichier lvl ?
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Python c'est bon, mangez-en. 

                            5 mars 2013 à 20:53:46

                            Je t'ai posté mon code plus haut.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              5 mars 2013 à 22:24:22

                              def load_level(filename):
                                  with open(filename) as file:
                                      return file.readlines()
                              
                              level = load_level("level.txt")
                              

                              Ensuite pour avoir la valeur d'une case du niveau il suffit d'utiliser la syntaxe : level[y][x].

                              • Partager sur Facebook
                              • Partager sur Twitter
                                5 mars 2013 à 22:41:09

                                transformes ton fichier lvl en liste de listes.

                                oops, pas vu la réponse de PsycoPy.

                                -
                                Edité par josmiley 5 mars 2013 à 22:42:12

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Python c'est bon, mangez-en. 

                                  6 mars 2013 à 11:56:58

                                  Ok PsycoPy, j'essaie ça, merci :)

                                  Edit : ça marche, merci :)

                                  -
                                  Edité par Kokokoz 8 mars 2013 à 17:50:42

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Pygames collisions de sprites

                                  × 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