Quitter proprement SDL

Le tutoriel en ligne vous pose quelques problèmes ? C'est ici pour en parler !

Quitter proprement SDL

Messagede YuGiOhJCJ le 12 Nov 2005 16:19

Voilà maintenant que je commence à savoir bien manier quelques fonctions de base en SDL je souhaiterai être sur de quitter correctement SDL.

Ce que je crois qu'il faut faire avant de quitter le programme;

-Il faut libérer toutes les surfaces contenant des images:
Code: Tout sélectionner
                        SDL_FreeSurface(sfc_terrain);
         SDL_FreeSurface(sfc_soldat1);
         SDL_FreeSurface(sfc_soldat2);
         SDL_FreeSurface(sfc_soldat3);
         SDL_FreeSurface(sfc_objet);


-Il faut utiliser la fonction:
Code: Tout sélectionner
         SDL_Quit();


Sinon je connais aussi ça qui se met en début de programme après avoir initialisé SDL:
Code: Tout sélectionner
atexit(SDL_Quit);


Dans ce cas...Est-ce qu'il est inutile d'utiliser SDL_Quit() plus loin dans le programme?

Sinon j'utilise des sons avec libsdl_mixer et je crois que pour quitter c'est:
Code: Tout sélectionner
Mix_CloseAudio();


C'est bien ça? Rien d'autres?

Aussi, pareil pour les polices...Faut que je pense à les quitter.
Je me rappelle plus de la fonction...Tu peux me la redonner?

Est-ce que j'oublie de quitter autre chose? Est-ce que exit(0); est utile après un SDL_Quit() ?
Enfin voilà quoi je voudrais tout savoir pour quitter proprement mon programme.

Merci de m'éclaircir sur ce point.
@+
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 12 Nov 2005 17:51

Bon, alors dans l'ordre :

- pour quitter, il faut en effet liberer tout ce que SDL à alloué et ensuite quitter. Dans ton exemple, il n'y a que les surfaces, mais si tu as utilisé des sons ou si tu as créé une socket réseau, il faut penser à la liberer aussi !!

Dans l'absolu, un SDL_Quit devrait suffire, car SDL garde une trace de tout ce qu'il à alloué et le liberera tout seul (je n'en suis pas totalement sur, mais de toute façon, quand tu quitte ton programme, tout estr détruit) Mais c'est une bone habitude à prendre que de liberer ce que tu n'as plus besoin au bon moment, déjà, ça permet de ne pas encombrer trop la mémoire (par exemple, si tu as plusieurs niveaux dans un jeu, au changement de niveau, tu libères tout ce dont tu n'a lpus besoin et tu crées ce qu'il te faut pour le niveau suivant...)


- si tu utilise atexit(SDL_Quit); tu n'es pas obligé d'utiliser SDL_Quit à la fin de ton programme ! car quand tu quitte la fonction "main", toutes les fonctions que tu as donné à "atexit" son executés avant de quitter le programme !
Néanmoins, je pense que atexit n'est pas une bonne pratique pour plusieurs raisons :
Déjà, cette fonction à des problèmes de portabilité ! elle ne fonctionne pas de la même façon sur tous les OS et ça peut poser des problèmes !
Ensuite, l'ordre d'execution de atexit n'est pas spécifié. donc si tu passe plusieurs fonctions, tu ne peux pas être sur de l'odre dans lequel elles seront exécutée et cela peut changer d'un compilo à l'autre.
C'est pour ça que j'ai areté d'utiliser aetxit !

Pour quitter SDL_Mixer, c'est bien Mix_CloseAudio(); qu'il faut utiliser !
Pour SDL_ttf, c'est TTF_Quit();

Pour la liste des fonctions utilisables et ce qu'elles font, tu peux toujorus te referrer à la doc officielle ('est ma source principale ;))
http://www.libsdl.org/cgi/docwiki.cgi/
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Merci

Messagede YuGiOhJCJ le 04 Déc 2005 11:44

Merci :pouce:
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Re: Quitter proprement SDL

Messagede screamX le 05 Déc 2005 12:45

YuGiOhJCJ a écrit:Est-ce que exit(0); est utile après un SDL_Quit() ?


La fonction exit(); n'a pas de rapport avec l'utilisation de tes librairies externes (telles que SDL ^^).
Il permet juste au gestionnaire de processus de savoir le code que renvoie ton programme pour en informer son père...
Enfin bon...c'est pas complètement utile (surtout sous Win) mais si tu imbriques des processus dans un de tes programme SDL ça peut être utile...
En toute rigueur il doit y avoir un exit(n) ou return n; à la toute fin de ton programme...après tu sais...
http://www.pgteam.fr.st - screamX, born to ski
Avatar de l’utilisateur
screamX
Chocobo des rivières
Chocobo des rivières
 
Messages: 1059
Inscription: 20 Juil 2005 10:57
Localisation: à la lisière d'un champ de peuf

Re: Quitter proprement SDL

Messagede YuGiOhJCJ le 09 Déc 2005 17:40

screamX a écrit:La fonction exit(); n'a pas de rapport avec l'utilisation de tes librairies externes (telles que SDL ^^).
[...]
Enfin bon...c'est pas complètement utile (surtout sous Win) mais si tu imbriques des processus dans un de tes programme SDL ça peut être utile...


oui il est sûr que exit(); sert en langage C et pas en SDL, mais puisque SDL est une librairie, je pensais qu'il fallait d'abord fermer la librairie puis quitter le programme.
Sinon, je suis pas sous Win mais sous Debian, mais qu'est-ce que tu appelles processus? Si ça se trouve j'en utilise un...
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede SkyghiS le 09 Déc 2005 20:19

Un processus est un programme qui est lancé.

Par exemple sous debian pour voir la liste des processus qui s'execute actuellement sur ton PC tu peu utiliser la commande "top"

Chaque processus a un numero unique (PID = Processus ID) qui permet de les identifier.

Par exemple si tu lance un programme "./montest" il aura pour PID 4500 (par exemple)

Si tu le lance une 2eme fois (sans fermer le premier) dans top tu vera qu'un 2eme "./montest" est apparu et qu'il a un PID different du premier.

J'espere avoi rété clair... :-k

en cas de PB, hesite pas a demandé
SkyghiS
 

Messagede Mateooo le 09 Déc 2005 20:45

yeah, on a un troisième serbo croate sur le site! :^^:
biz les gens bon codage ^^
Mateooo
 

Messagede SkyghiS le 10 Déc 2005 01:36

cocoboum moi aussi :)

dsl pour le spam c'etait plus fort que moi :goutter:

[spoiler]il faut avoir vu la pub 9telecom pour comprendre ^^[/spoiler]
SkyghiS
 

Re: Quitter proprement SDL

Messagede screamX le 10 Déc 2005 08:44

YuGiOhJCJ a écrit:Sinon, je suis pas sous Win mais sous Debian, mais qu'est-ce que tu appelles processus? Si ça se trouve j'en utilise un...


Les processus dont je parle plus particulièrement, sont les processus que tu créés toi même avec une fonction du genre "fork()".
C'est à dire que tu as (en gros) deux parties de TON code qui s'exécute "en même temps".
C'est peut-être utilisé pour gérer les entrées (clavier, souris, ...) dans un jeu vidéo...(moi j'utilisais pas trop ça, je faisait des boucles de ouf...)
Et quand le processus que tu as créé se termine tu peux lui faire renvoyer une valeur (par exit() ) au morceau de code qui la créé (un peu compliqué nan ? XD) pour savoir comment celui-ci c'est terminé (mais je le rappel, je pense pas que ce soit très utile dans le cadre de la fermeture de SDL...tiens je crois que je me suis un peu éloigné du sujet en fait >.<)
http://www.pgteam.fr.st - screamX, born to ski
Avatar de l’utilisateur
screamX
Chocobo des rivières
Chocobo des rivières
 
Messages: 1059
Inscription: 20 Juil 2005 10:57
Localisation: à la lisière d'un champ de peuf

Messagede SkyghiS le 10 Déc 2005 14:59

tiens je crois que je me suis un peu éloigné du sujet en fait >.<)

ouai G T en train de partir sur les threads, mais bon je vais m'aretter la ^^
sinon on est parti pour expliquer toute la prog system ;)
SkyghiS
 

cool le jeu

Messagede YuGiOhJCJ le 17 Déc 2005 12:43

Ouais je connaissais les processus dont tu parles, je pensais que tu parlais de quelque chose en rapport avec la programmation #-o
Moi j'utilise
Code: Tout sélectionner
"ps"
pour afficher les processus.

Sinon, je viens de terminer mon jeu vidéo en SDL:
http://81.56.209.13/~samson/downloads/Shopeuros20051217.tar.gz

Enfin terminer est un bien grand mot, j'ai pleins d'idées pour l'améliorer mais bon en ce moment j'ai pas trop le temps avec les études.
Ci@o :pouce:
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 17 Déc 2005 13:54

hheeuuuuu... quand je lance, il me dit : "partie terminée" et je peux que quitter avec "echap" #-o

Tu préfèrerai aps me filer les sources (si ça ne te dérange pas, bien sur...) comme ça je jetterai un oeil ! Et je corrigerai ça !
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede YuGiOhJCJ le 18 Déc 2005 13:00

Ouais c expliqué dans le fichier texte A_lire.txt:
"J" pour jouer.
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 18 Déc 2005 13:17

ok... je sors :goutter:

(en plus je l'ai lu.. comment j'ai fait pour rater ça ?)

Tu devrais l'écrire sur l'écran d'acceuil ;)
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede moi1392 le 18 Déc 2005 13:35

C'est bon, je l'ai testé ;)

Il est sympa et c'est super bien pour un premier jeu !! :oui: En plus, l'IA n'arete pas de me battre :nah:

Continue comme ça ;)

Quelques idées pour rendre ton jeu plus intéressant (selon moi... :roll:) et développer des nouvelles versions :

- faire une "fin" du genre celui qui à ramassé 50 € gagne la partie.
- A partir de là, tu peux faire plusieurs stages, avec peut-être des "murs" dans les stages suivants pour corser le jeu !
- peut-être essayer de faire apparaître plusieurs pièces en même temps...(je sais pas si ça peut-être rigolo.. faudrait voir)
- peut-être mettre plusieurs "ennemis" controlés par l'IA (idem que la précedente.. mais les deux ensemble, ça pourrait être rigolo)
- ne pas avoir besoin d'appuyer plusieurs fois sur les touches pour se déplacer : un appuis commence le déplacement, et le bonhomme se déplace jusqu'à ce que l'on lache le bouton

Voila, c'est toutes les idées que j'ai eu pour l'instant, s'il y en a que tu trouve intéressantes et que tu as envie d'implémenter mais que tu ne sais pas trop comment faire, n'hésite pas à me faire signe ;)

a+
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede YuGiOhJCJ le 18 Déc 2005 15:15

Merci pour toutes ces suggestions ;) et surtout de te proposer à m'aider encore
Il y a beaucoup de ces points auxquel j'avais déjà pensé pour des prochaines versions.
Regarde ce que j'avais noté:
/*-----------------------------------*
| A faire: |
| ->Affichage d'un Menu |
| .Jouer |
| -1 joueur + ordi |
| -1 joueur seulement |
| -2 joueurs + ordi |
| -2 joueurs seulement |
| .Options |
| -Difficulté de l'ordi |
| -Temps de la partie |
| .Quitter |
| ->Affichage du temps de la partie |
| ->Affichage du gagnant |
*-----------------------------------*/

Donc ça va j'ai du boulot :nah:
Si j'ai du temps, j'essaierai de l'améliorer encore :pouce:
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer


Retourner vers Besoin d'aide en SDL ?

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités

cron