Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] 2D isométrique

J'ai déjà fais des recherches

Sujet résolu
    11 novembre 2011 à 17:08:08

    Bonsoir,

    Voila comme dans le titre j'ai une question.

    Je suis en train de programmer un rpg. J'ai déjà fais un style de la carte en 2D et bien avancé dans le jeu (du moins l'organisation du code et le système pour création de partie, sauvegarde, chargement, l'inventaire...)

    Mais maintenant après avoir bien réfléchi j'aimerais changer le style graphisme passer de 2D à 2D isométrique.

    Malheureusement après quelques recherches je ne vois pas comment faire.

    Ma map est enregistré sous une image. Le problème est surtout le code. Auriez vous des tutoriels ou des codes déjà fait pour que je m'en inspire ?

    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      11 novembre 2011 à 17:49:44

      http://fr.wikipedia.org/wiki/3D_isom%C3%A9trique
      Commence par lire ca. En theorie y'a rien de trop sorcier, un peu de maths mais meme moi j'arrive a suivre, donc ca devrait aller.
      • Partager sur Facebook
      • Partager sur Twitter
        11 novembre 2011 à 17:54:21

        Plutot l'impression que sa apprend à le dessiner et non à le mettre en place dans un programme
        • Partager sur Facebook
        • Partager sur Twitter
          11 novembre 2011 à 18:19:53

          Et dans "approche mathématique" ?
          • Partager sur Facebook
          • Partager sur Twitter
          www.creationjeuxjava.fr - Unity3D - LibGDX - Tutoriels de Jeux vidéo !
            11 novembre 2011 à 18:26:04

            Malheureusement je n'y compris presque rien.
            De plus, peut-être une question idiote, il donne 3reperes, (x, y et z) en 2D le "z" n'existe pas. Ou l'utilise t'on pour la vue 3/4.

            Merci LePetitRobear peut-être comprendrais je mieux avec :)
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              11 novembre 2011 à 18:30:55

              Pour transformer ton jeu, il suffit de changer l'affichage des tiles/cartes et de changer la gestion des collisions. Après peut être d'autres choses en fonction de ton jeu.
              • Partager sur Facebook
              • Partager sur Twitter
                11 novembre 2011 à 18:39:58

                Dans un jeu isométrique tout est pareil , il n'y à que l'affichage qui change
                • Partager sur Facebook
                • Partager sur Twitter
                  11 novembre 2011 à 18:40:57

                  Oui sa je l'ai bien compris c'est justement (ou c'était) le comment afficher tout sa
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    11 novembre 2011 à 19:16:08

                    Tu fais du tile mapping ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 novembre 2011 à 22:11:12

                      un exemple vite fait (la fonction qui t’intéresse est 'show' ):
                      # include <stdlib.h>
                      # include <stdio.h>
                      # include <SDL.h>
                      # include <SDL_image.h>
                      
                      
                      
                      # define HalfTileWidth 32
                      # define HalfTileHeight 32
                      # define NUMB_TILE 100
                      # define WIDTH 640
                      # define HEIGHT 480
                      
                      int yzero = 0;
                      int xzero = 0;
                      typedef struct
                      {
                          unsigned char quit;
                          char keys[SDLK_LAST];
                          SDL_Rect MousePos;
                      } Input;
                      
                      
                      
                      
                      void UpdateEvent(Input *i)
                      {
                          SDL_Event e;
                          while(SDL_PollEvent(&e))
                          {
                              switch (e.type)
                              {
                                  case SDL_KEYDOWN:
                                      i->keys[e.key.keysym.sym] = 1;
                                      break;
                                  case SDL_KEYUP:
                                      i->keys[e.key.keysym.sym] = 0;
                                      break;
                                  case SDL_QUIT:
                                      i->quit = 1;
                                      break;
                                  case SDL_MOUSEMOTION:
                                      i->MousePos.x = e.motion.x;
                                      i->MousePos.y = e.motion.y;
                                      break;
                                  default: break;
                              }
                          }
                      }
                      void Show (SDL_Surface* img)
                      {
                          int i,j;
                          SDL_Rect pos;
                          SDL_Surface  *scr = SDL_GetVideoSurface();
                          for ( i = 0; i < NUMB_TILE; i++)
                              for ( j = 0; j < NUMB_TILE; j++)
                              {
                                  pos.x = (i - j)* HalfTileWidth + xzero;
                                  pos.y = (i + j)* HalfTileHeight + yzero;
                                  SDL_BlitSurface(img,NULL,scr,&pos);
                              }
                      }
                      
                      int main(int argc, char** argv)
                      {
                          Input in;
                          memset(&in,0,sizeof(in));
                      
                          SDL_Init(SDL_INIT_VIDEO);
                          SDL_Surface *scr = SDL_SetVideoMode(WIDTH,HEIGHT,32,SDL_HWSURFACE | SDL_DOUBLEBUF);
                          SDL_Surface *img = IMG_Load("img.png");
                      
                          while(!in.quit && !in.keys[SDLK_ESCAPE])
                          {
                              SDL_FillRect(scr,NULL,0);
                              Show(img);
                              UpdateEvent(&in);
                              if ( in.keys[SDLK_RIGHT])
                                  xzero--;
                              if ( in.keys[SDLK_LEFT])
                                  xzero++;
                      
                              if ( in.keys[SDLK_UP])
                                  yzero++;
                              if ( in .keys[SDLK_DOWN])
                                  yzero --;
                              SDL_Flip(scr);
                          }
                          SDL_FreeSurface(img);
                          SDL_Quit();
                          return 0;
                      }
                      

                      Image utilisateur
                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 novembre 2011 à 8:08:06

                        Petite question rapide :

                        Si "i" = 0 et "j" > 0
                        sa risque pas de faire des coordonnées : "x : -32; y : 32" ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          12 novembre 2011 à 8:53:55

                          Je n'y connais rien en iso, mais j'y ai déja réfléchi:
                          A mon avis, tu crée ton monde, tranquille, sur une surface.
                          Ensuite, tu fais tourner cette surface ce 90).
                          Pour finir, pour donner un aspect plus "vue a ras du sol", tu enlève une ligne de pixels sur deux a ta surface obtenue. C'est plus plat, toutes les tiles sont devenues d'un coup isométriques, ca devrait le faire. Par contre, fais gaffe: ca fonctionnerais pour tout ce qui est sol, mais pour les truc "élevés", comme des arbres, des maisons, je sais pas trop. Peut-être reblitter dessus...
                          • Partager sur Facebook
                          • Partager sur Twitter
                            12 novembre 2011 à 10:53:27

                            @Merwyyn:
                            Justement, car on recherche ce genre de groupement : http://img291.imageshack.us/img291/6128/tutoiso02th5.png
                            • Partager sur Facebook
                            • Partager sur Twitter
                              12 novembre 2011 à 11:24:30

                              Hum d'accord.
                              Bon beh plus qu'a tester toutes ceci :)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                15 novembre 2011 à 7:31:20

                                Bonjour,

                                Voila après avoir fais des test de nouvelles recherches ect....

                                Voici le résultat avec la tile utilisé

                                Image utilisateur

                                Image utilisateur

                                Voici mon code
                                SDL_Surface *image = NULL;
                                    SDL_Rect pos;
                                    int i, j;
                                
                                    image = IMG_Load("herbe.png");
                                
                                    for ( i = 0; i < 25; i++)
                                    {
                                        for ( j = 0; j <25; j++)
                                        {
                                            pos.x = (i - j) * (image->w / 2) - 0;
                                            pos.y = (i + j) * (image->h / 2) - 0;
                                            SDL_BlitSurface(image,NULL,ecran,&pos);
                                        }
                                    }
                                


                                PS : Vous que c'est un nouveau probleme j'ai crée un new topic qui est dorénavant résolu :)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 novembre 2011 à 18:33:59

                                  La tile ne me semble pas encore écrasée ;).

                                  Rééssaye avec quelque chose d'1/4 plus petit.

                                  EDIT: Hum...pourquoi retires-tu 0 ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  [SDL] 2D isométrique

                                  × 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