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:
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
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); } } }
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; }
Partager