Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de scrolling

    27 juin 2007 à 23:57:55

    Bonjour à tous :)

    Je suis toujours sur mon petit rpg 2d, et j'en suis venu a devoir crée un système de scrolling pour qu'on puisse tout de même admirer ma carte :p

    J'ai réussi pour le moment a faire en sorte que seul les sprites qui sont dans le champ de vision du joueur soit chargé (et comme je l'ai fait tout seul, j'en suis assez fier :-° ).

    Par contre, je n'arrive pas a faire en sorte que le joueur soit "centré" au milieu de l'écran, et que seul le terrain "bouge".

    Pourriez vous m'indiquez comment faire s'il vous plait ?

    void scrolling(SDL_Surface *ecran,int infoCarte[][NB_BLOCS_LARGEUR],int carte[][NB_BLOCS_LARGEUR])
    {
         long i=0,j=0;
         SDL_Rect position;
         SDL_Surface *montagne=NULL,*eau=NULL,*herbe=NULL;
         int a=0,b=0,c=0;
         int *p_a=&a,*p_b=&b; /*création des pointeurs pour rechercheJoueur */
         
         montagne=IMG_Load("Images/Terrains/montagne.bmp");
         eau=IMG_Load("Images/Terrains/eau.bmp");
         herbe=IMG_Load("Images/Terrains/herbe.bmp");
         
         SDL_SetColorKey(eau, SDL_SRCCOLORKEY, SDL_MapRGB(ecran->format,69,103,137));
         SDL_SetColorKey(montagne, SDL_SRCCOLORKEY, SDL_MapRGB(ecran->format,69,103,137));
         SDL_SetColorKey(herbe, SDL_SRCCOLORKEY, SDL_MapRGB(ecran->format,69,103,137));
         
         rechercheJoueur(p_a,p_b,infoCarte); /* récupération de la position du joueur*/
         
         SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,255,0,255));
         
         if(b-8>=0 && a-4>=0) /*Si le joueur est situé a bonne distance des bords de la carte */
         {
            for(i=a-4;i<a+5;i++)
            {
              for(j=b-7;j<b+8;j++)
              {
    /*c'est surement ici que je dois intervenir mais je sais pas trop comment */
                 position.x=j*TAILLE_BLOC;
                 position.y=i*TAILLE_BLOC;                           
                 switch(carte[i][j])
                 {
                    case MONTAGNE:
                     SDL_BlitSurface(montagne,NULL,ecran, &position);
                     break;   
                 
                    case EAU:
                     SDL_BlitSurface(eau,NULL,ecran, &position);
                     break;
                 
                    case HERBE:
                     SDL_BlitSurface(herbe,NULL,ecran,&position);
                     break;
                 }
              }
            }
         }
         else if(b-8<0) /*Si le joueur est trop près du bord gauche ou droit de la carte*/
         {
            for(c=8;b-c<0;c--);
             
            for(i=a-4;i<a+6;i++)
            {
              for(j=b-c;j<b+8;j++)
              {
                 position.x=j*TAILLE_BLOC;
                 position.y=i*TAILLE_BLOC;                           
                 switch(carte[i][j])
                 {
                    case MONTAGNE:
                     SDL_BlitSurface(montagne,NULL,ecran, &position);
                     break;   
                 
                    case EAU:
                    SDL_BlitSurface(eau,NULL,ecran, &position);
                     break;
                 
                    case HERBE:
                     SDL_BlitSurface(herbe,NULL,ecran,&position);
                     break;
                  }
              }
            }
             
             
         }
         
         else if(a-4<0) /*si le joueur est trop près du bord haut ou bas de la carte */
         {
            for(c=4;b-c<0;c--);
            for(i=a-c;i<a+6;i++)
            {
              for(j=b-8;j<b+8;j++)
              {
                 position.x=j*TAILLE_BLOC;
                 position.y=i*TAILLE_BLOC;                           
                 switch(carte[i][j])
                 {
                    case MONTAGNE:
                      SDL_BlitSurface(montagne,NULL,ecran, &position);
                      break;   
                 
                    case EAU:
                      SDL_BlitSurface(eau,NULL,ecran, &position);
                      break;
                 
                    case HERBE:
                      SDL_BlitSurface(herbe,NULL,ecran,&position);
                      break;
                 }
              }
            }
         }
         SDL_FreeSurface(herbe);
         SDL_FreeSurface(eau);
         SDL_FreeSurface(montagne);
    }


    Et voici ma fonction rechercheJoueur :

    /*Fonction servant a trouver la position du joueur, qu'il soit selectionnee ou non*/
    /*Cette fonction modifie la valeur de deux int grace au pointeurs*/
    /*Ces valeurs servirons a positionner le joueur dans infoCarte*/


    int rechercheJoueur(int *i,int *j,int infoCarte[][NB_BLOCS_LARGEUR])
    {
         int h=0,k=0;
         int marqueur=0;
         
         for(h=0;h<NB_BLOCS_HAUTEUR;h++)
               {
                 for(k=0;k<NB_BLOCS_LARGEUR;k++)
                 {
                   switch(infoCarte[h][k])
                   {
                       case JOUEUR:
                            *i=h;
                            *j=k;
                            marqueur=1;
                            break;
                       case JOUEUR_ACTIVE:
                            *i=h;
                            *j=k;
                            marqueur=2;
                            break;
                   }   
                 }
               }
         return marqueur;
    }


    Merci d'avance :)
    • Partager sur Facebook
    • Partager sur Twitter

    Problème de scrolling

    × 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