Bonjour, j'essaie de faire un scrolling pour ma carte chargée directement avec des rendercopy à partir de la texture du tileset. Pour le moment je parviens juste à scroller de case en case en me déplacement dans mon char* qui contient l'agencement de mes tuiles, le problème étant que ça donne un aspect saccadé(de case en case). Ça fait quelques jours que j'y réfléchi et j’arrive pas à ce que je veux. Je voudrais éviter de charger toute la carte. J'ai énormément cherché et je trouve peu de chose à ce sujet, si quelqu'un pouvait me partager sa technique j'en serais reconnaissant, merci d'avance.

Voilà la fonction toute simple qui ne fait que bouger de tuile en tuile:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Affiche_Carte(SDL_Renderer* renderer,texture* tabTx, s_point* cam)
{//tabTx est juste un tableau de ma struct texture où sont stockées les texures,rectangles+2-3 trucs
  int xDecal = (*cam).x/LTILE;
  int yDecal = (*cam).y/HTILE;
 
  for(int y=0; y < H/HTILE; y++)
    {
      for(int x=0; x < L/LTILE;x++)
	{ //map est le tableau qui contient les maps(char*) et tabTx[0] la struct texture du tileset
	  tabTx[0].srcRect.x = (map[0][(y+yDecal)*NB_TILE_LARGEUR+(x+xDecal)]-'0')*LTILE;
	  tabTx[0].dstRect.y = y*HTILE+HMARGE;
	  tabTx[0].dstRect.x = x*LTILE+LMARGE;
 
	  SDL_RenderCopy(renderer, tabTx[0].tx, &tabTx[0].srcRect, &tabTx[0].dstRect);
	}
    }  
}
et ensuite la caméra bouge avec ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
void Camera(texture* tabTx, s_point* cam,const Uint8* state)
{
  if(state[SDL_SCANCODE_UP] && (*cam).y >0)
    (*cam).y-=VIT_CAM;
  if(state[SDL_SCANCODE_RIGHT] && (*cam).x < (NB_TILE_LARGEUR*LTILE-L))
    (*cam).x+=VIT_CAM;
  if(state[SDL_SCANCODE_DOWN] && (*cam).y < (NB_TILE_HAUTEUR*HTILE-H))
    (*cam).y+=VIT_CAM;
  if(state[SDL_SCANCODE_LEFT] && (*cam).x >0)
    (*cam).x-=VIT_CAM;
}