CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C/SDL] Prob SetColorKey

vexover
vexover
Niveau 9
20 février 2007 à 18:19:40

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 :-p .

Voici mon code : http://rafb.net/p/MhINwx99.html

L´extension des sprites utilsés est en bitmap.

dnob700
dnob700
Niveau 10
20 février 2007 à 18:41:49

tu dois appeler seticon avant setvideomode pour ton problème d´icône. Pour le reste, je n´en sais rien.

vexover
vexover
Niveau 9
20 février 2007 à 19:51:49

D´accord, merci bien ^^, malheureusement ce n´est vraiment pas mon soucis premier mais c´est déja ça :ok:

Fvirtman
Fvirtman
Niveau 10
22 février 2007 à 10:48:57

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.

vexover
vexover
Niveau 9
23 février 2007 à 21:06:01

D´accord merci beaucoup je commençais à desespérer, je vais essayer de faire ça, encore merci ^^.

vexover
vexover
Niveau 9
26 février 2007 à 13:56:51

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)

Fvirtman
Fvirtman
Niveau 10
26 février 2007 à 14:04:50

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 :-)

vexover
vexover
Niveau 9
26 février 2007 à 14:13:11

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 :o)) .

vexover
vexover
Niveau 9
26 février 2007 à 14:25:05

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 ) .

dnob700
dnob700
Niveau 10
26 février 2007 à 15:34:43

c´est moi où alors ta constante n´est pas dans l´appel de la fonction SDL_Init, mais posé juste après ?

Fvirtman
Fvirtman
Niveau 10
26 février 2007 à 16:29:21

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 ?

vexover
vexover
Niveau 9
26 février 2007 à 18:11:24

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

Fvirtman
Fvirtman
Niveau 10
26 février 2007 à 18:13:06

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 !

vexover
vexover
Niveau 9
26 février 2007 à 18:39:31

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 ?

Fvirtman
Fvirtman
Niveau 10
26 février 2007 à 18:41:08

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é.
}

KeepSmile
KeepSmile
Niveau 4
26 février 2007 à 18:41:38

Bonjour,

pourrais tu poster ton code afin qu´on puisse l´examiner :), le lien du premier poste n´est plus valide.

vexover
vexover
Niveau 9
26 février 2007 à 18:47:44

bien sur ^^ .
http://rafb.net/p/ZtbC8182.html

KeepSmile
KeepSmile
Niveau 4
26 février 2007 à 18:59:38

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).

vexover
vexover
Niveau 9
26 février 2007 à 19:01:19

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.

vexover
vexover
Niveau 9
26 février 2007 à 19:03:21

PS : Si si tous les bmp sont au bon endroit .

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment