Bonjour à tous.
J´ai un problème qui est le suivant :
Ayant finit de coder les initialisations de mon application, j´ai compilé et éxécuté mon code pour vérifier qu´aucune erreurs ne s´étaient immiscés à l´intérieur, et ô misère je constate que la fenêtre s´affiche puis repart aussi vite qu´elle n´était arrivée. après quelques investigation je me suis rendu compte que cela était dûe à l´utilisation de la fonction SDL_SetColorKey, celle-ci étant supprimé, la fenêtre s´affiche parfaitement(à un détail près, l´icone censé apparaître en haut à gauche de celle-ci n´apparaît pas, bien qu´il apparaisse dans la barre de tâche de windows, je ne sais pas si cela à un quelquonque rapport avec mon réel problème). j´ai aussi constater que les fichiers destinés aux erreurs stdout et stderr persistaient dans le dossier de l´application, j´ai donc tout de suite pensé que l´application n´était enfaite pas totalement hors-marche et qu´elle tournait en fond, mais après vérification de mes processus, j´en ai déduit que cela était due à une mauvaise fermeture de l´application qui n´aurait pas laisser le loisir au programme de supprimer ces fichiers, cela montre bien que la fermeture au niveau de SetColorKey est imprévu par la SDL. Aussi il n´y a pas l´ombre d´une ereur dans le debugger et j´ai vérifié 3 fois l´éditeur de liens, et ca fait 3 jour que je cherche l´erreur alors je m´en remet à vous, vous êtes mon ultime chance
.
Voici mon code : http://rafb.net/p/MhINwx99.html
L´extension des sprites utilsés est en bitmap.
tu dois appeler seticon avant setvideomode pour ton problème d´icône. Pour le reste, je n´en sais rien.
D´accord, merci bien ^^, malheureusement ce n´est vraiment pas mon soucis premier mais c´est déja ça ![]()
Tu es surement tombé sur le parachute de SDL.
Moi j´aime pas bien ce parachute.
SDL est équippé d´un systeme de catch pour les plantage qui arrete l´application plutot que de la faire planter.
Personnellement, étant bourrin et fier de l´etre, je prefere que l´application plante. Pour cela, je désactive le parachute. Dans l´init, tu peut rajouter un parametre SDL_NOPARACHUTE.
De la, tu pourras débuggueur l´application avec un débuggueur classiquement
Et a mon avis (j´ai ma petite idée) : la surface que tu passes a SDL_ColorKey a mal été chargée : si ça se trouve, tu as fait une faute de frappe dans le lien, tu coup, le SDL_Surface* renvoyé est NULL, et si tu passes NULL a certaines fonctions -> BOOM !! !
vérifie, apres tes chargements d´image, que l´image chargée ne vaut pas NULL, avec un if ou un assert.
D´accord merci beaucoup je commençais à desespérer, je vais essayer de faire ça, encore merci ^^.
J´ai essayer mais le debugger m´affirme que SDL_NOPARACHUTE n´est pas déclaré, j´ai utiliser la fonction ainsi :
ecran = SDL_SetVideoMode(600, 400, 32, SDL_HWSURFACE | SDL_NOPARACHUTE);
...
28 C:\Dev-Cpp\Projets\projet graphiques\projet 2D\main.c `SDL_NOPARACHUTE´ undeclared (first use in this function)
En effet, c´est SDL_INIT_NOPARACHUTE.
Mais j´aurais une critique a te faire :
Il faut etre débrouillard. tu vois que j´ai fait une faute, bon, ok. Tu dois te dire "il a du se gourrer, mais il doit exister quelque chose comme ça"
Du coup, hop, regarder la doc :
http://www.libsdl.org/cgi/docwiki.cgi/SDL_20API
(met donc ce lien dans tes favoris !)
Puis regarder dans la fonction SDL_Init :
http://www.libsdl.org/cgi/docwiki.cgi/SDL_5fInit
Et hop ! Tu retrouve la bonne syntaxe ![]()
Arf ok merci, oui c´est vrai que j´aurais du rechercher mais j´ai tout de suite pensé que c´était un problème du au debugger, je n´aurais jamais penser que le grand fvirtman puisse un jour se tromper
.
Heu, je suis vraiment désolé de vous déranger encore mais même avec SDL_NO_PARACHUTE le problème reste, voici la syntaxe que j´ai utiliser :
SDL_Init(SDL_INIT_VIDEO); // Initialisation de la SDL
SDL_INIT_NOPARACHUTE;
SDL_WM_SetCaption("Test de profondeur 2D", NULL);
SDL_WM_SetIcon(SDL_LoadBMP("Icone.bmp"), NULL);
ecran = SDL_SetVideoMode(600, 400, 32, SDL_HWSURFACE | SDL_INIT_NOPARACHUTE);
Vous remarquerez que j´ai aussi utiliser SDL_INIT_NOPARACHUTE dans le SDL_SetVideoMode, mais c´étaiot parce que je n´étais pas completement sur de la syntaxe et que de toute façon meme quand j´utilise les deux syntaxes independamment l´une de l´autre le problème reste ( ma fenêtre se referme instantanément ) .
c´est moi où alors ta constante n´est pas dans l´appel de la fonction SDL_Init, mais posé juste après ?
ben tu sais, il arrive a tout le monde de se tromper
met bien les flags ou il faut :
SDL_INIT_NOPARACHUTE dans SDL_SetVideoMode peut faire n´importe quoi (la gestion de flags ne subit aucun controle)
Met le bien dans SDL_init.
Et je suis ok avec Dnob, j´ai l´impression que tu as mis ton flag hors de SDL_init.
Aucun effet en dehors
ça compile d´ailleurs ?
Oui oui ça compile.
Bon maintenant la fenêtre ne se referme pas, elle reste un certain moment avant que survienne une erreur windows " projet erreur ... voulez-vous envoyer le rapport d´erreur ? ... etc ". C´est une petite avancée mais ça ne me permet toujours pas d´identfier la vraie cause de l´erreur, j´ai juste la signature de l´erreur :
AppName: projet2d.exe AppVer: 0.0.0.0 ModName: projet2d.exe
ModVer: 0.0.0.0 Offset: 00001697
lance ton programme en mode "debug", tu dois avoir une option : quand il t´arretera, il te dira ou il s´est planté.
quoiqu´il en soit, ça confirme une chose : c´est un plantage du a l´appel d´une de tes fonctions, a toi de corriger ça !
Ce serait apparement du à une erreur de segmentation mais je n´ai aucune idée de ce que cela veut dire .
Pouvez-vous m´éclairer ?
a mon avis, tu as une image que tu charges, qu´il n´a pas trouvé, donc il renvoie NULL, et apres, tu essaies de bosser dessus -> crash.
apres tes chargements d´image, met des
if (mon_image==NULL)
{
// un truc, si tu passes la, c´est que ça a crashé.
}
Bonjour,
pourrais tu poster ton code afin qu´on puisse l´examiner
, le lien du premier poste n´est plus valide.
bien sur ^^ .
http://rafb.net/p/ZtbC8182.html
personnelement, je n´ai aucune problème à compiler et executer ton code, donc je suppose que tu as pas mis tous les fichiers BMP là ou se trouve ton fichier main.cpp (vérifie).
En effet, à la suite du chargement des images j´ai mis :
if( persoFaceStop == NULL )
{
fputs("persoFaceStop = SDL_LoadBMP(perso face1.bmp); ", fichier);
}
Et comme par magie j´ai trouver l´inscription
"persoFaceStop = SDL_LoadBMP(perso face1.bmp); " dans le fichier que j´avais préalablement créé.
Donc apparement le premier chargement rate, je n´ai pas fait le test pour les autres mais il est fort propable que le résultat soit le même.
Malheureusement je ne vois pas ce qui provoque ce mauvais chargement, l´image chargée dans persoFaceStop est un BMP 30 X 59 pixels tous ce qu´il y a de plus normal.
PS : Si si tous les bmp sont au bon endroit .