Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Tutoriel] Tile Mapping

vos questions, propositions d'évolution

    21 décembre 2009 à 12:00:11

    Bonjour, suite a la mise en ligne de mon nouveau tuto sur le tilemapping :

    http://www.siteduzero.com/tutoriel-3-1 [...] -mapping.html

    je crée ce topic pour en discuter, ce qui évitera de parler dans les commentaires du tuto. cf le règlement :pirate:

    Citation : règlement

    Nous vous rappelons que cet espace est réservé aux commentaires à propos des tutoriels, veillez donc à ne pas poser vos questions dans cette section.
    Pour cela, rendez-vous sur le forum ! Merci.




    EDIT : première modification effectuée : refactoring :
    Les variables ont maintenant un nom plus explicite.
    • Partager sur Facebook
    • Partager sur Twitter

    Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

      21 décembre 2009 à 12:55:44

      Tout d'abord bravo pour ce tuto :)
      Vraiment sympa !

      J'ai juste quelques remarques ^^
      Pour faire un accès au pixels il faut locker la surface mais tu ne le fait pas :)

      Et ici ya une petite erreur de copier/coller je pense :

      if (!vram)
      		r=SDL_CreateRGBSurface(SDL_SWSURFACE, f->w, f->h, 32, 0, 0, 0, 0);  // cree une image en RAM
      

      Tu voulais sûrement mettre HWSURFACE :)

      Encore bravo !
      • Partager sur Facebook
      • Partager sur Twitter
        21 décembre 2009 à 12:59:03

        Ecxelent tuto. Tout le monde l'attendait. Il faudrait aussi insérer un systeme de saut plus "Expliqué/Simple" que le tuto existant.
        Houra :)
        • Partager sur Facebook
        • Partager sur Twitter
          21 décembre 2009 à 13:59:26

          Citation : Pouet_forever

          J'ai juste quelques remarques ^^
          Pour faire un accès au pixels il faut locker la surface mais tu ne le fait pas :)



          En effet, mais comme je charge les images dont le but est d'être analysées pixel/pixel en RAM, le lock n'est pas nécessaire :) Il prend son sens que si l'image est en VRAM.
          En effet, si l'image est en RAM, le lock n'a pas d'effet. Peut etre devrais je quand meme le mettre, mais disons que c'est facultatif dans ce cas !

          Citation : Pouet_forever


          Et ici ya une petite erreur de copier/coller je pense :



          En effet :) J'ai remodfié cela, ainsi que fait du refactoring des noms de variables ce matin, ça a été validé il y a peu.

          Citation : realmagma

          Ecxelent tuto. Tout le monde l'attendait. Il faudrait aussi insérer un systeme de saut plus "Expliqué/Simple" que le tuto existant.
          Houra :)



          Je présenterai un système de saut, en présentant quelques règles de physique, et en donnant une fonction "magique" pour ceux qui n'auront pas les notions de physique nécessaires :)
          • Partager sur Facebook
          • Partager sur Twitter

          Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

            21 décembre 2009 à 14:25:57

            Citation : Fvirtman


            Je présenterai un système de saut, en présentant quelques règles de physique, et en donnant une fonction "magique" pour ceux qui n'auront pas les notions de physique nécessaires :)



            Justement à propos de ça., je me suis intéressée au saut en 2D il n'y a pas longtemps. J'ai tout d'abord voulu utiliser la méthode des paraboles mais on m'a justement dit que c'était trop de calculs pour un petit jeu de plateforme. Du coup, on m'a présenté une méthode qui n'est pas réaliste mais qui permet d'imiter un saut. (cf. ce post) Est ce cette méthode que tu comptes présenter ou alors reprendre le tutoriel déjà existant avec méthode des paraboles et méthode avec la loi de Newton ?

            • Partager sur Facebook
            • Partager sur Twitter
              21 décembre 2009 à 14:32:01

              Ce que je proposerai sera de garder en mémoire :

              - la position x,y du bonhomme
              - sa vitesse instantannée vx,vy

              C'est a dire qu'a n'importe quel moment, on saura ou il est (fondamental) et a quelle vitesse et dans quelle direction il est en train de bouger (un vecteur).
              Cela ne sera pas fondamental pour l'utilisateur de lire ce vecteur, mais ça le sera pour le calcul.

              En effet, je fournirai une fonction "Evolue" qui prend :
              - position x,y,
              - vitesse instantannée vx,vy,
              - force appliquée (souvent que la gravité)
              - "dt" temps passé depuis la derniere frame

              Et cette fonction calculera le nouveau x,y, et le nouveau vx,vy avec les formules de Newton. (pas le moteur physique, la formule mathématique directe)

              Quand on sautera, la fonction mettra juste a jour vx et vy vers le haut, et l'évolution calculera toute seule, pour chaque frame, comment le bonhomme évoluera.
              Je gererai également facilement de la meme maniere la possibilité de controler son saut.

              Pour l'utilisateur, il suffira d'appeler une fonction "Saut", puis ensuite, a chaque frame, d'appeler "Evolue" : ça se fera assez simplement.

              Et le mouvement sera réaliste.
              • Partager sur Facebook
              • Partager sur Twitter

              Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                21 décembre 2009 à 14:35:21

                Citation : Fvirtman


                En effet, si l'image est en RAM, le lock n'a pas d'effet. Peut etre devrais je quand meme le mettre, mais disons que c'est facultatif dans ce cas !


                Tout à fait, ce n'est que la mémoire vidéo, qui a besoin d'être "lockée", pour un accès direct.
                Pour une surface en mémoire conventionnelle, on en a pas besoin(C'est même logique...).

                On le fait, souvent un peu pour les mêmes raisons que l'utilisation de la fonction SDL_Blit plutôt que SDL_UpdateRects... Ca marche dans tous les cas, et si jamais on a des essais à faire en passant en mémoire vidéo, ça fonctionne encore...

                @Pouet_Forever : Pour essayer, enlève les locks des plasmas que tu a créé, tu verras, cà fonctionne encore. :)

                Et merci pour le tuto, Fvirtman.
                • Partager sur Facebook
                • Partager sur Twitter
                Zeste de Savoir, le site qui en a dans le citron !
                  21 décembre 2009 à 14:40:37

                  Mais en effet, il serait mieux de mettre lock, un peu comme je pense qu'il est mieux de mettre flip pour du simple buffering.
                  Bon, je ne vais pas le mettre, car il faudrait que j'explique directement, dans le chapitre 1, ce qu'est le lock :) je vais épargner un peu mes lecteurs jusqu'au paragraphe 1.3. :diable:
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                    21 décembre 2009 à 19:36:30

                    Salut,

                    Très sympa ce tuto! :)

                    Pour remonter encore plus loin dans le passé (je crois que tu as débuté sur des 16 bits?), les premiers ordinateurs pour jouer (les 8 bits de chez Atari, Commodore, etc...) utilisaient comme dans ton tuto des mondes en mode texte, mais on décrétait que le tile avait une dimension de 8x8, ce qui correspond aux dimensions d'un caractère de l'époque... Tu vois venir la suite, on associait à chaque monde un jeu de caractères et on dessinait vraiment le monde en mode texte!

                    A+

                    Pfeuh
                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 décembre 2009 à 22:50:24

                      Ah j'ai quand même connu la NES 8 bits, mon fidèle Atari ST et l'Amstrad CPC de mon cousin sur lequel j'ai tapé mes premières lignes de code :)

                      Mais en effet, le tile mapping en ASCII me rappelle de vieeeeux souvenirs, mais j'ai peu joué à ce genre de jeux. Mais tiens, on pourra imaginer un pac-man en mode texte par exemple :)
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                        22 décembre 2009 à 11:46:41

                        Salut, :)

                        C'est une obligation d'utiliser le char pour faire le tableau 2D ? Je le fais en C++ et j'aimerais ne pas utiliser std::ostringstream.
                        Sinon, je l'ai fait avec des int et tout fonctionne mais c'est juste pour savoir si il y a une convention qui dit que les tableaux 2D doivent être obligatoirement construit avec des char.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 décembre 2009 à 11:50:21

                          char : range de 255 valeurs
                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 décembre 2009 à 11:51:14

                            C'est surtout pour la mémoire qu'il a utilisé des char :)
                            Tu peux très bien utiliser des int ou autre :)

                            Citation : Fvirtman

                            Pour faire mon monde de Mario, j'ai besoin du tileset (une petite image en soi), et du tableau.
                            Si je considère que je n'aurai pas plus de 256 tiles différents (je tape très large, et c'est souvent le cas), je peux compter 1 octet par case de mon tableau.
                            Avec mon tableau de 13*15, j'ai moins de 200 octets .... C'est très petit.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 décembre 2009 à 11:54:28

                              C'est en effet uniquement une histoire de mémoire. Mais si cela te gene, tu peux mettre des int. Ta machine a assez de mémoire pour le supporter sans aucun soucis :)
                              EDIT : si tu le fais en C++, tu peux si tu le souhaites utiliser de std::vector<std::vector<char> >
                              Cependant, les tableaux normaux compileront tout aussi bien.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                                22 décembre 2009 à 12:34:50

                                Perso j'ai bien aimé le projet d'éditeur de niveau.
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Etudiant-ingénieur en Mécatronique à l'INSA de Strasbourg (BAC+5)

                                  22 décembre 2009 à 12:56:02

                                  Citation : Fvirtman


                                  EDIT : si tu le fais en C++, tu peux si tu le souhaites utiliser de std::vector<std::vector<char> >
                                  Cependant, les tableaux normaux compileront tout aussi bien.



                                  Je vais justement réorganiser mon code pour pouvoir faire un tableau de Tile (une classe que je vais créer).
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    22 décembre 2009 à 13:00:32

                                    Le code que je propose, même en C, est assez "orienté objet" de toute manière.
                                    Il te suffira de remplacer les structures par des classes, et les fonctions qui s'appuient dessus par des méthodes.
                                    Concretement, la fonction Chargermap pourra etre le constructeur de la classe map, Liberer le destructeur.

                                    Théo/007 > A terme, ce sera en effet un éditeur de niveau qu'il faudra faire.
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                                      23 décembre 2009 à 15:32:16

                                      Est-ce que je peu proposer (sur ce forum) des tiles que j'ai fait ?
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Etudiant-ingénieur en Mécatronique à l'INSA de Strasbourg (BAC+5)

                                        23 décembre 2009 à 15:34:14

                                        Moi ça ne me pose pas de soucis. Comme tu veux :)
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                                          23 décembre 2009 à 15:39:06

                                          Salut

                                          Bravo pour ce tutoriel, c'est très intéressant. On va enfin pouvoir faire des jeux de plateformes très facilement avec la SDL :D .

                                          Et ça va être très utile pour d'autres types de moteurs. Je pense qu'avec peu de changements, on pourrait utilisant ton tutoriel pour la création d'un moteur en pseudo "3D iso" (sans le système de case en forme de losange et un moteur en 2D).

                                          Donc, encore merci pour ce tutoriel vraiment intéressant ;) .



                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            23 décembre 2009 à 15:42:59

                                            En effet, la 3D iso, c'est uniquement au niveau de l'affichage que le rendu est "de biais". La manipulation des structures est grossièrement la même.

                                            Le but est d'enfermer au maximum la difficulté dans des sous fichiers, de façon a ce que ce soit simple pour l'utilisateur.

                                            Par exemple, le dernier exemple appelle des fonctions "ChargerMap" "AfficherMap" "LibererMap" qui sont "relativement" complexes en interne, mais simples à appeler.

                                            Il viendra par exemple prochainement une fonction facile qui gèrera le scrolling toute seul : il suffira de lui dire quel "objet" on veut suivre (un personnage), et la caméra le suivra, rendu le scrolling complètement automatique.
                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                                              23 décembre 2009 à 15:55:12

                                              Voilà donc un tile que j'ai fait :
                                              Image utilisateur

                                              Légende :

                                              0 : Sol
                                              1 : Vide (ciel)
                                              3 : à vous de choisir moi je dirai un mur
                                              4 : à vous de choisir moi je dirai un mur
                                              5 : Tuyau (côté gauche bas)
                                              6 : Tuyau (côté droit bas)
                                              7 : Tuyau (côté gauche haut)
                                              8 : Tuyau (côté droit haut)
                                              9 : Boîte à bonus (non utilisé)
                                              - : Boîte à bonus (utilisé)
                                              - : Buisson (côté gauche)
                                              - : Buisson (centre)
                                              - : Buisson (côté droit)
                                              - : Eau
                                              - : Eau
                                              - : Barre du drapeau de fin du niveau
                                              - : Morceau du drapeau
                                              - : Morceau du drapeau
                                              - : Morceau du drapeau
                                              - : Champignon bonus
                                              - : Ennemi

                                              C'est une image en GIF (pour info).
                                              Mais pour le numéro mettre 10 ça vaudrait un 1 et un 0 non ?

                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Etudiant-ingénieur en Mécatronique à l'INSA de Strasbourg (BAC+5)

                                                23 décembre 2009 à 16:15:37

                                                Alors avec l'astuce que j'utilise (ou tu dessines l'image avec paint), tu n'as plus le probleme des nombres (au dela de 9), donc ton set passera parfaitement.

                                                Par contre, ton dernier tile est animé : ça, ça ne passera pas. Il faudra découper les diverses animations et en faire plusieurs tiles.

                                                A noter que l'idée sera de bien séparer le tileset (les briques) des charset (les persos, les monstres)
                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                                                  6 janvier 2010 à 22:55:54

                                                  Je l'attendais avec impatience :) Merci encore. La partie qui m'intéresserait pour la suite du tuto serait comment passer derrière un arbre par exemple (une notion de profondeur), comme tu en as parlé. Je viens de me rendre compte que j'utilise pleins de méthodes du tuto que j'ai créé pour mon p'tit RPG, au moins je suis pas totalement à côté de la plaque :p .

                                                  Bonne chance pour la suite du tuto !
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    6 janvier 2010 à 23:01:58

                                                    Merci :)
                                                    J'ai commencé la partie 2, et je suis actuellement en train d'expliquer les collisions avec le décor :)

                                                    Pour passer derriere un arbre, j'en parlerai apres : il suffit en fait de faire plusieurs couches !
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                                                    Anonyme
                                                      6 janvier 2010 à 23:25:57

                                                      pense tu faire une partie dans ton tuto sur la gestion de plusieurs couche de calque a la manière RPGmaker?
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        6 janvier 2010 à 23:36:33

                                                        Alors je ne sais pas exactement comment RPG Maker gere cela, mais je ferai du multicouche :
                                                        - pour gérer des arbres devant par exemple
                                                        - pour gérer un fond qui défile moins vite que l'avant plan.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                                                          6 janvier 2010 à 23:49:53

                                                          Mince je n'avais pas vu ce tuto, ni ton autre sur les évennements. Il a l'air bien complet et est très précis, beaucoup d'exemple et d'indication bravo. Un détail tout de même que je sens venir et dont tu devrais prévenir tes lecteurs, c'est de bien utiliser des images .bmp pour sauvegarder leur "cartes" car ils risquent souvent d'enregistrer en .jpg et donc se retrouver face au problème de la compression d'image.

                                                          C'est un peu domage, j'ai commencé un très gros tuto sur comment gérer tout un projet, les méthodes à trouver etc pour faire un gros jeu de plateforme avec scrolling et tout le bataclan. Bref ça sera un peu redondant mais je suis beaucoup plus succint.

                                                          Note: je regarderais plus précisément ton tuto sur les évents, car avec que méthode similaire, je n'ai toujours qu'un seul évennement clavier produit et donc une seule touche activé à chaque fois.
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            7 janvier 2010 à 10:02:43

                                                            En effet, je préciserai qu'il est important d'utiliser un format d'image sans perte (BMP, voir PNG, mais surtout éviter JPG)

                                                            Si tu fais un tuto, j'irai le lire :) Je ne pense pas que ce soit mauvais d'en avoir plusieurs qui traitent des parties en commun, ça permet d'avoir plusieurs approches.

                                                            En effet, ce que je présente est mon approche. Bien sur, dans mes années passées, je me suis bien pété les dents a essayer d'autres trucs qui ont échoué, ou que j'ai pu simplifier, discuter avec des gens sur le sujet, et ce que je propose est, pour le moment, ce que je préfère :)

                                                            Il est à noter aussi que Mathéo a déja présenté un peu le tilemapping avec Mario Sokoban. J'ai quand même fait mon tuto pour aller plus loin dans ce domaine la.
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                                                            [Tutoriel] Tile Mapping

                                                            × 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