Bonjour,comment va ??
me cela ira peut être mieux après, je me présente un peu, depuis deux mois j'apprends à programmer en C avec la sdl, et j'ai créer un éditeur de map basique qui fonctionne.Et un bout du jeu qui va avec, j'apprends sur plusieurs site, c'est cool très 8-)
J'ai voulu l'améliorer et mettre un menu déroulant à droite avec mes tiles affichées pour pour les choisir.
fonction qui affiche
Et ma fonction qui gére le choix de la tileCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 void drawTileset (void) { int x,y,i,xsource,ysource; /*La limite de début d'affichage du menu*/ x = LIMITE_SURF-TILE_SIZE; y = 0 ; /*Rectangle et fond du menu*/ SDL_Surface *rectangle=NULL, *fond=NULL; fond = SDL_CreateRGBSurface(SDL_HWSURFACE,SURF_NB_TILE_X,SCREEN_HEIGHT,32, 0,0, 0, 0); rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE,33, 33, 32, 0,0, 0, 0); /*Taille des rectangles*/ SDL_FillRect(rectangle, NULL, SDL_MapRGB(jeu.screen->format, 255,0,0 )); SDL_FillRect(fond, NULL, SDL_MapRGB(jeu.screen->format, 255,0,0 )); /*affichage du fond*/ drawImage(fond,LIMITE_SURF+TILE_SIZE ,0); /*Affichage des tiles et si i=la tile choisi on dessine un rectangle derriére*/ for(i=map.chipsetStartY;i<=MAX_TILES;i++) { if (i==cursor.tileID) { drawImage(rectangle,x,y); } ysource = i / NBR_TILE_X * TILE_SIZE; xsource = i % NBR_TILE_X * TILE_SIZE; drawTile(map.tileSet,x, y, xsource, ysource); /*On incrémente x de la taille d'une tile, et remise à la limite d'affichage si la tile dépasse de l'écran*/ x += TILE_SIZE+1; if(x>=(SCREEN_WIDTH-TILE_SIZE)) { x=LIMITE_SURF-TILE_SIZE; y+=TILE_SIZE+1; } } /*On libére les surfaces*/ if (rectangle != NULL) { SDL_FreeSurface(rectangle); } if (fond != NULL) { SDL_FreeSurface(fond); } }
1---Donc voilà, mon soucis c'est que j'ai un décalage lorsque je choisi ma tileCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 menuNbTile=(SURF_NB_TILE_X)/(TILE_SIZE+1); char file[120]; /*menu deroulant*/ if (input.pagedown==1) { if (map.chipsetStartY<=MAX_TILES-menuNbTile) map.chipsetStartY+=menuNbTile; } if (input.pageup==1) { if (map.chipsetStartY>=menuNbTile) map.chipsetStartY-=menuNbTile; } /*si clic sur bouton droit souris,x superieur à la limite d'affichage*/ if(input.copy==1 ) { if (cursor.x>LIMITE_SURF ) { /*fonction qui pose problème pour choisir ma tile*/ cursor.tileID= map.chipsetStartY + ((cursor.x)/ TILE_SIZE+1) + menuNbTile*(cursor.y/ TILE_SIZE+1); if(cursor.tileID>=MAX_TILES) { cursor.tileID=MAX_TILES-1; } input.copy=0; }
exemple: je choisi la tile n°3, et j'obtient la tile n°65, si je choisi la 6,l'obtient la 130.
Le décalage est donc une valeur constante, que j'ai cherché et qui se trouve être la largeur de l'écran(SCREEN_WIDTH).
2---Mais là ou cela devient un peu frustrant,c'est que si je descend la souris (cursor.y),un autre décalge de -1 pixel sur cursor.x et cursor.y se met en place à chaque fois que je descend cursor.y de une TILE_SIZE.
Normalement, enfin pour moi il me semble ne pas avoir oublier de rattraper mon pixel de déport.
Si quelqu'un comprend mes explications, je veux bien un peu d'aide :D