Bonjour,
Dans le cadre du tilemaping je vais devoir utiliser un tableau contenant les textures ( je n'utilise pas de tileset parce que j'ai déjà un dossier blindé de ptites tuiles hexagonales correspondants parfaitement à ce que je veux faire :3 ) mais également un tableau 2D contenant la représentation de la carte avec des chiffres.
Malheureusement ça ne fonctionne pas très bien, et je ne trouve que des guides SDL 1.2 sur internet qui parle de ça ( il y a un bon tuto sur le tile mapping sur ce site mais comme on est sensé avoir un très bon niveau en C et SDL les explications sur ce qui m'intéresse sont peu nombreuses ), et j'avoue que je galère un peu à comprendre comment ça fonctionne en n'utilisant que la doc, le but n'étant pas de faire du copier-coller mais de savoir ce que je fais un minimum hein ;D j'ai déjà toutes les formules d'écrites pour le placement des tiles, sur quelle tile j'ai cliqué etc c'est vraiment la gestion avancée des tableaux qui m'embête :/
Je vous passe donc mon ptit morceau de code, merci d'avance pour vos explications sur mes erreurs le debuggeur est utile mais c'est pas ça qui va m'aider pour le coup
La structure :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 typedef unsigned char tilecarte; //raccourci pratique typedef struct Terrain Terrain; { char nombretile, largeur, hauteur; //variable contenant le nombre de tiles différents utiliser dans le niveau, la largeur et la hauteur du monde tilecarte** carte; //création du tableau 2D carte, SDL_Texture** tile; //création du tableau 1D contenant une texture ( un tile différent ) par valeur donc }
La fonction pour mettre les textures dans le tableau :
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 Terrain terrain; //déclaration de la structure en dehors de la fonction pour que tout le .c puisse l'utiliser [/COLOR] void Chargement(FILE* fichier) //la fonction, je récupère un fichier texte contenant les détails du niveau { char cache[CACHESIZE]; //un cache pour des infos temporaires, le CACHESIZE vaut 1000 caractères je suis tranquille[/COLOR] unsigned char i; //je déclare la variable i fscanf(fichier, "%d", &terrain.nombretile); //je lis la ligne contenant le nombre de tiles différents ( 1 seul pour le moment c'est juste du test ) terrain.tile = malloc(terrain.nombretile*sizeof(SDL_Texture*)); //j'alloue de la mémoire au tableau, le nombre de tiles différents x l'espace qu'utilise un SDL_Texture ) for ( i=0; i<terrain.nombretile; i++ ) //la boucle de remplissage { fgets(cache,CACHESIZE,fichier); //je prends l'adresse de la tile en question ( image/espace/stars.png ) que je met dans le cache terrain.tile[i] = loadTextureImage(cache); //loadTextureImage fait la conversion adresse => surface => texture, il fonctionne déjà très bien j'ai fais le menu principal avec ^^ if ( terrain.tile[i] == NULL ) //petite vérif d'erreur... { exit(4); //qui éteint le programme et me renvoie 4 dans la figure à chaque fois que je lance le programme } } }
La fonction permettant de mettre le tableau du fichier texte ( que des 0 séparés par des espaces, 14 en large et 10 en hauteur ) :
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 void Carte(FILE* fichier) { char cache[CACHESIZE]; unsigned char i, j; fscanf(fichier,"%d %d",&terrain.largeur,&terrain.hauteur); //j'ai une ligne dans le .txt contenant la largeur et la hauteur du monde en tile terrain.carte = malloc(terrain.largeur*sizeof(tilecarte)); //j'alloue de la mémoire au tableau en fonction de la largeur du monde x la place que prendre tilecarte for(i=0;i<terrain.largeur;i++) { terrain.carte[i] = malloc(terrain.hauteur*sizeof(tilecarte)); //j'alloue de la mémoire au tableau en fonction de la hauteur du monde x la place que prends tilecarte } for (j=0; j<terrain.hauteur; j++) //boucle pour le remplissage { for (i=0; i<terrain.largeur; i++) { unsigned char num; //la ptite variable contenant le numéro de la tile à coller ( il n'y a que des 0 de toute manière ) fscanf(fichier, "%d", &num); //récupération if ( num >= terrain.nombretile ) //si je dois coller la tile 5 alors qu'il n'y en a que 3 différentes ça ne va pas le faire... { exit(6); //on quitte si c'est le cas } terrain.carte[i][j] = num; //on fout le chiffre aux bonnes coordonnées et c'est reparti jusqu'à ce qu'il n'y en ai plus } } }
Voili voilou, j'espère avoir été clair ( j'ai sans doute mis trop de commentaires mais ça me permet de m'y retrouver, moi et tout ceux qui tomberont sur cette discussion ^^ )
Révélez moi mes bourdes :p
PS1 : Les 2 fonctions sont sur la même pas .c, comme j'ai déclarer la structure sur cette même page en dehors des fonctions pas besoin d'utiliser des pointeurs, tant mieux les -> partout je trouve ça peu lisible mais bon ~
PS2 : le programme s'éteint et me renvoie 4 à la figure mais il n'y peut-être pas que la qu'il y a des erreurs
Partager