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
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 tile
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
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 tile
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
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![]()
Partager