Scrolling tilemapping rendercopy
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:
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:
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;
} |