Hello...
Bon, après quelques semaines de recherche infructueuse, je viens demander de l'aide à propos d'un GROS problème dans mon programme.
J'ai implémenté à un projet un système de tiles de 32 * 32 px sur un écran de 544 * 416 px (soit 17 * 13 tiles à l'écran), mais ça plante totalement. Est-dû à une surconsommation de mémoire ?
Voici les portions de code concernées : ma structure Map et la fonction destinée à l'afficher (si je n'appelle pas la fonction, ça tourne normalement et pas de plantage, donc...).
typedef struct
{
int id, scrolling; // ID et scrolling de la map
int tab[MAP_WIDTH][MAP_HEIGHT]; // Matrice de la map
sfSprite *tile; // Textures des tiles
Coord coord; // Vecteur coordonnées d'un tile
sfRenderWindow **app;
} Map;
void drawMap(Map* map)
{
// Indices pour parcourir la matrice
register int i, j;
sfImage *img = NULL;
// (Ré)initialisation du vecteur coordonnées de la map
map->coord.y = 0;
map->coord.x = map->scrolling;
// Boucle d'affichage des tiles
for (i = 0; i < MAP_WIDTH; i++)
for (j = 0; j < MAP_HEIGHT; j++)
{
// Détermination des coordonnées
map->coord.x = map->scrolling + TILE_SIZE * i;
map->coord.y = TILE_SIZE * j;
if (map->tile != NULL)
sfSprite_SetPosition(map->tile, map->coord.x, map->coord.y);
// Affichage du tile correspondant à tab[i][j] si à l'écran
if (map->coord.x < COORD_MAX && map->coord.x > COORD_MIN)
switch (map->tab[i][j])
{
// Affichage du tile d'ID 1
case 1:
img = sfImage_CreateFromFile("210.jpg");
sfSprite_SetImage(map->tile, img);
sfRenderWindow_DrawSprite(*(map->app), map->tile);
break;
// Affichage du tile d'ID 2
case 2:
img = sfImage_CreateFromFile("211.jpg");
sfSprite_SetImage(map->tile, img);
sfRenderWindow_DrawSprite(*(map->app), map->tile);
break;
// A venir...
case 3:
break;
case 4:
break;
case 5:
break;
default:
break;
}
}
sfImage_Destroy(img);
}
Et enfin le message d'erreur dans la console :
A propos du bug, sinon : j'affiche une map uniforme (tous les tiles sont les mêmes), et au bout d'un moment, ils se mettent à changer d'apparence apparemment aléatoirement plusieurs fois par seconde. Une idée ? =(