LIBRAIRIE GRAPHIQUE SDL

mickbad Messages postés 71 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 20 avril 2008 - 28 févr. 2006 à 14:38
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009 - 5 mars 2006 à 17:28
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/36303-librairie-graphique-sdl

cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
5 mars 2006 à 17:28
Tu as raison pour "le plus propre", c'ets ce que je sous-entendais...
@+
mickbad Messages postés 71 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 20 avril 2008
4 mars 2006 à 17:24
oula .. tu as raison sur la fonction SDL_Delay(int) !!
je l'avais oublié !

A ma décharge quand je fais du SDL, j'utilise un moteur que j'avais réalisé un jour incluant le SDL_Delay ;)

Ceci dit, je ne suis pas d'accord dans le terme "plus propre".
Héhé, ce n'est pas "plus propre" mais plus "intelligent" car SDL_Delay s'affranchit de la plateforme utilisée.

Cependant en interne, pour win32 par exemple la SDL utilise Sleep(..):
void SDL_Delay(Uint32 ms) { Sleep(ms); }

Pour Linux, les développeurs n'utilisent pas usleep() !
étrange mais il doit y avoir une raison (surtout que usleep fait parti des libs standards distribués, je me trompe ?) .. et puis je n'ai pas envie de chercher, toc :))


.Mick.
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
4 mars 2006 à 15:33
C'est vrai qu'uitliser une boucle pour faire attendre n'est pas tres precis parce que suivant la puissance du processeur, la boucle sera plus ou moins longue... il vaut mieux utiliser comme l'a suggerer mickbad la fonction Sleep() mais tant qu'a faire, autant utiliser SDL_Delay(int) qui fait fait la meme chose mais plus propre a mon avis (appartient directement a la lib sdl) et qui fait une pose de x milisecondes....
@++ et bon code !!
Rouliann Messages postés 115 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 23 août 2008 1
1 mars 2006 à 20:05
Ca existe pas déja des fonctions pour tracer des lignes dans la SDL ? O_ô
cs_PLA Messages postés 3 Date d'inscription samedi 10 mai 2003 Statut Membre Dernière intervention 1 mars 2006
1 mars 2006 à 08:53
L'horloge a été faite avant la librairie et j'ai décidé de mettre les deux codes en même temps mais c'est pour cette raison que je n'utilise pas la librairie.
De plus je n'aime pas trop les structures avec les noms à rallonge et c'est vrai qu'un de ces jours il faudrait que je fasses de l'orienté objet.
mickbad Messages postés 71 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 20 avril 2008
28 févr. 2006 à 14:46
ah oui, pour l'exemple, j'ai vu que tu as fait un programme Horloge en SDL (http://www.cppfrance.com/codes/NET-HORLOGE-SDL_36304.aspx)

mais en tout cas tu n'as pas de fonction quitter(), tu as dû t'apercevoir qu'elle ne servait à rien en l'état, non ?

Et pour revenir à la façon d'encapusler SDL en mode objet, pense que tu peux toujours faire de l'objet en C (avec des strutures par exemple) : du moins lorsque j'ai appris le C, on faisait du C plutôt orienté objet :) pour certainement préparer les cours de C++ ;)

en tout cas, c'était efficace comme méthode :)))

.Mick.
mickbad Messages postés 71 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 20 avril 2008
28 févr. 2006 à 14:38
salut,

j'ai peut-être quelques remarques sur la librairie.

Déjà, pourrais-tu mettre un exemple d'utilisation ? non pas que cela soit très difficile de mettre en oeuvre un programme test, mais pour les néophytes que nous sommes ... un ch'tite pensée :)

Ensuite, personnellement ça m'ennuie de voir à ta fonction initSDL un exit si l'initialisation SDL ne se fait pas : en fait, tu ne laisses pas le soin au programmeur de gérer justement les erreurs ! Oui, on peut nous même changer le code mais on peut imaginer que cela ne soit pas possible (dll, lib ...)

Dans la fonction :
void pause(void)
{
long i=0;
while (i<PAUSE) i++;
}

oulala, tu n'as pas peur pour ton CPU!
le mien (les miens car il est bi le cochon ;) commence à activer son ventilateur dès que le CPU dépasse les (admettons) 35%. Alors si dans un jeu (surtout un p'tit), je fais une pause d'affichage, j'entends mon ventilo s'affoler .. je ne vois plus l'intérêt de la pause.
Nan .. pour résumer ... ta boucle ne propose pas trop au système de passer à un autre processus (programme) donc il va demander la main au processeur tout le temps alors que c'est inutile:
solution, un ch'tite pause :
while (++i < PAUSE) Sleep(10); /* par exemple */
sachant que Sleep est défini dans windows.h et un équivalent sur linux usleep dans unistd.h (aux unités d'argument près)


Que dire d'autre : visiblement tu dois faire un initSDL() puis un initCouleurs dans ton programme .. moui, autant faire un appel d'initCouleurs dans initSDL à ce moment là (vive l'automatisme);
Mais de manière globale, et ça n'engage que moi naturellement, quitte à encapusler les appels SDL, pourquoi ne pas faire de l'objet ?
effectivement ça permettait bcp de choses et d'éviter à se poser des questions quant au nommage des fonctions de la librairie car on peut facilement avec une fonction pause() ailleurs ;)

m'enfin, le C c'est bien aussi, je te rassure .. jamais obligé d'employer du C++

Dernière chose : MAIS OU SONT LES COMMENTAIRES ??
héhé! ben oui je suis toujours étonné d'en voir rarement sur ce genre de code (censé être réutilisé ailleurs). Ne me dis pas qu'ils sont dans le .h
Oui j'ai vu mais le code par lui-même n'a que très peu de commentaire !

Je pense que tu comprends ce que je veux dire. Sinon, un jour tu le comprendra surtout si tu dois par exemple reprendre un code d'une autre personne pour le débugger et/ou le faire évoluer !


une dernière chose, comment tu utilises ta fonction quitter() par exemple ? en gros, pour moi, ta fonction n'est pas bonne car elle me raconte que si je l'emploi le programme devrait s'arrêter et là ... pas vraiment !

bonne continuation
.Mick.
Rejoignez-nous