Si l'appel de la fonction est mis dans la fonction principale, l'image sera affichée. Par contre, si l'appel de cette fonction est mis dans une fonction secondaire (donc autre que dans le main), l'image ne s'affiche pas...
EDIT 2 : @Warren79, je penses en effet que tu ais raison, c'est surement le chemin d’accès à l'image qui doit être perdu car l'image elle est bien créée, donc le chemin existe encore avant la fonction qui doit gérer son chargement, puis son affichage.
- Edité par ReunanBeauvois 22 février 2020 à 19:33:06
A la sortie de la fonction function() valueA retrouvera sa valeur avant la fonction, tandis que valueB aura sa valeur impactée à la sortie de la fonction (il gagne 2 en plus sur sa valeur d'int).
Dans le code ci-dessous:
void firstFunction()
{
Type *ptrA;
Type *ptrB;
secondFunction(ptrA, &ptrB);
}
void secondFunction(Type *typeAPtr, Type **typeBPtr)
{
typeAPtr = malloc(etc...);
*typeBPtr = malloc(etc...);
//A la fin de cette fonction la nouvelle valeur de typeAPtr
//est perdue alors que typePtrB gardera sa valeur allouée (qui peut être égale à NULL donc à vérifier
}
Tu as sûrement appris que lors d'un passage d'argument par valeur (même type entre type passé et type en paramètre) la variable copiée pour le contexte de la fonction est détruite à la fin de la fonction appelée et... c'est pareil pour les pointeurs; si ta fonction qui alloue un SDL_Surface , prend un simple pointeur sur SDL_Surface et que tu passe un SDL_Surface à cette fonction alors la valeur si elle change sera détruite à la fin de la fonction. Donc quand tu veux allouer une valeur à un pointeur à l'interieur d'une fonction et que la modification soit impactée au sortir de la fonction, passe ton pointeur par adresse par exemple:
void allocateMemory(int ***ptr)
{
*ptr = malloc(8 * sizeof(int*);
for( size_t i{0} ; i < 4 ; ++i )
{
(*ptr)[i] = malloc( sizeof(int) );
}
//Ici, on alloue une matrice de 4* 8 integers
}
int main()
{
int **ptr;
allocateMemory(&ptr);
return 0;
}
J'espère que je me suis pas trompé dans le dernier exemple
C'est surtout un problème d'adresse de l'image à charger, le chemin n'est pas pris en compte et à chaque fois que je tente quelque chose, le programme plante.
C'est le deuxième paramètre de cette fonction qui me pose problème :
Quoi que je fasse, ça ne marche pas, l'image qui a été créée par cette fonction ne s'affiche pas.
EDIT : En faisant des tests par rapport à la fonction charge_image, j'ai pu vérifier si le chemin était bien retenu, apparemment oui, donc c'est peut-être la surface ?
- Edité par ReunanBeauvois 26 février 2020 à 12:28:44
Tu as la macro 'SDL_GetError()' à disposition , que tu peux utiliser avec fprintf avec '%s' (par exemple pour un fichier de log) qui renvoie la dernière erreur, s'il y en a une. Sinon à part ça, tu ne vérifies pas le retour de la fonction SDL_LoadBMP() dans ta fonction 'charge_image()'.
Pour ceux qui se posent la question, je n'ai toujours pas trouvé. J'ai le code façon brute mais j'aimerais bien avoir mon main être clair et pas faire plus de 10000 lignes de codes.
Là actuellement je ne sais pas où est l'erreur, si c'est la surface, si c'est le rectangle ou si c'est le chemin tellement que ça me prend la tête.
Pour le SDL_LoadBMP, le programme ne plante pas car le chemin est bien retenu et utilisé, puisque cette fonction interrompt le programme si le chemin est faux (ce qui n'est pas le cas ici), c'est la surface qui est responsable de ce bug et je ne sais pas comment réparer ça.
Tout les codes ont déjà été donnés, je ne sais pas quoi faire d'autre.
Je suppose que comme tous les "débutants", tu as codé tout le machin sans faire de test en cours de route.
On commence par un code simple, qui initalise sdl et l'écran, on véririe si c'est ok.
On code ensuite le chargement de l'image, on l'affiche pour vérifier si c'est ok.
Etc.
ReunanBeauvois a écrit:
Tout les codes ont déjà été donnés, je ne sais pas quoi faire d'autre.
Ben non.
Où se trouve le code qui remplit tab_image[....].path ? Comment est déclaré (et / ou défini) tab_image ? As-tu appelé tes fonctions dans le bon ordre ? (oui, c'est con comme question, mais ça arrive). Tu dis que le programme est interrompu si l'image ne se charge pas, mais cette partie du code est-elle corecte ? (nous, on ne sait pas).
- Edité par edgarjacobs 27 février 2020 à 16:38:46
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Problème d'affichage d'image avec BlitSurface
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Mon site web de jeux SDL2 entre autres : https://www.ant01.fr
Mon site web de jeux SDL2 entre autres : https://www.ant01.fr
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent