SDL: Afficher un texte dans une fenêtre

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

SDL: Afficher un texte dans une fenêtre

Messagede YuGiOhJCJ le 24 Fév 2005 00:39

Salut,
En langage C, c'est simple pour afficher du texte:
printf("Hello World!");

Mais en SDL, pour afficher un texte dans une fenêtre, il faut passer obligatoirement par des images BMP? :question:
[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 24 Fév 2005 01:10

C'est effectivement un peu plus compliqué en SDL...

tu peux choisir la facilité et utiliser SDL_ttf, c'est une 'sous-bibliothèque' de SDL (comme SDL_image ou SDL_mixer) qui charge une police "true type" (la plupart des polices de ton pc sont de ce type) et écrit pour toi à l'écran.

Sinon, ce que je faisait au début, quand je ne conaissait pas SDL_ttf, c'est que je chargais un BMP avec toutes les lettres dedans, j'initialisait un tableau de SDL_RECT pour qu'il découpe parfaitement mes lettres, et je blittais "manuellement" les lettres à l'écran les unes à la suite des autres...

La première méthode est plus simple et plus fiable !! la seconde à le mérite de te faire bosser un peu tes surface SDL ;)

voila, à plus !!
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 24 Fév 2005 02:23

Ok génial je vé opter pour la 1ère solution.
J'avais justement pensé à cette idée de BMP pour chaque lettre mais ça m'aurait découragé de savoir que je n'avais que cette solution lol
Je te remercie beaucoup :D
[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

test de SDL_ttf

Messagede YuGiOhJCJ le 03 Avr 2005 17:27

Voilà j'ai essayé de faire fonctionner SDL_ttf pour afficher des caractères mais c'est difficile.
Voilà comment j'ai procédé:
1)Il faut utiliser l'en-tête SDL_ttf.h:
Code: Tout sélectionner
#include <SDL/SDL_ttf.h>


2)Ensuite, il faut initialiser SDL_ttf:
Code: Tout sélectionner
int initTTF(){
   if(!TTF_WasInit() && TTF_Init()==-1) {
       fprintf(stderr, "Impossible d'initialiser TTF: %s\n", TTF_GetError());
       exit(2);
   }//Fin de la boucle if(TTF_Init()==-1)
   atexit(TTF_Quit); //Pour quitter proprement TTF
   return(0);
}//Fin de la boucle int initSDL_TTF()


3)Puis il faut charger une police:
Code: Tout sélectionner
int loadTTF(){
   TTF_Font *font;
   font=TTF_OpenFont(police, 16);
   if(!font) {
       printf("Impossible de charger la police: %s\n", TTF_GetError());
   }//Fin de la boucle if(!font)
}//Fin de la boucle int loadTTF()


4)Je créé une surface pour accueillir le texte:
Code: Tout sélectionner
SDL_Surface *sfc_texte;


5)Maintenant il faut afficher un texte:
Code: Tout sélectionner
sfc_texte=TTF_Render_Solid(font, "Hello World!", &color);


Mais non ça ne fonctionne pas car le compilateur me dit que font n'est pas déclarée...

En résumé:
j'ai créé une fonction initTTF, une fonction loadTTF, une surface sfc_texte, puis j'ai essayé d'afficher le texte.

Hypothèses:
Le problème doit venir de mes lacunes en langage C. Le fait d'avoir créé des fonctions et de faire appel à elles dans la fonction main(), ça doit poser problème.
Ou aussi, c'est possible que je me sois trompé dans l'utilisation de ces fonctions...Que j'ai mal lu les docs.

Tu sais où je me suis planté?
[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 04 Avr 2005 15:57

c'est un peu court pour répondre, essaie de poster l'erreur exacte du compilo et le source en complet si possible.
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 04 Avr 2005 16:10

je rectifie.. ca suffit pour trouver l'erreur, la variable "font" est déclarée dans la fonction loadTTF, il est normal que tu ne puisses pas y acceder à l'exterieur de cette fonction..

Il y a deux solutions "simples" pour résoudre ce problème :

- tu déclares "TTF_Font *font;" en global (à l'exterieur de toute fonction au début du fichier juste après les includes). Ca marche mais c'est pas joli-joli.

- tu fait renvoyer à la fonction loadTTF la font que tu as chargé au lieu d'un int :

Code: Tout sélectionner
TTF_Font *loadTTF()
{
   TTF_Font *font;
   font=TTF_OpenFont(police, 16);
   if(!font) {
       printf("Impossible de charger la police: %s\n", TTF_GetError());
       return NULL;
   }//Fin de la conditionnelle if(!font)
   return font;
}//Fin de la fonction int loadTTF()


et tu N'OUBLIES PAS de vérifier si la fonction renvoie une valeur non nulle.
Cette méthode est un poil meilleur que la précedente mais elle demande un peu plus de boulot : il faut en plus déclarer une variable TTF_Font à l'endroit ou tu veux t'en servir et penser à la liberer après, en plus cela t'oblige à charger une nouvelle font à chaque fois que tu en as besoin.. c'est pas le must pour les performances !!!

Le mieux dans ton cas serait un hybride entre les deux solutions, une variable font globale que tu initialises au début de ton programme grace à la fonction loadTTF et que tu liberes à la fin.

Sinon, tu peux aller vois dans la section téléchargements du coin prog et récuperer l'exemple "balles", j'y ai écrit une classe (C++) qui écrit tu texte à l'écran, il te suffirait de l'adapter à SDL_ttf.
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

OK c bon

Messagede YuGiOhJCJ le 05 Avr 2005 20:47

J'ai mis TTF_Font *font; en global et maintenant ya plus l'erreur cool. J'utiliserai maintenant la technique avec le return; pour voir...

Maintenant ya encore une erreur...Je pense que j'utilise mal la fonction qui sert à afficher le texte. J'ai du mal comprendre la doc que j'ai lu.
Je sais qu'il faut utiliser la fonction:
TTF_Render_Solid();

mais je pense que les argument que j'ai mis dedans sont mauvais. Tu sais t'en servir?
Dernière édition par YuGiOhJCJ le 28 Avr 2005 01:45, édité 1 fois.
[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: OK c bon

Messagede YuGiOhJCJ le 05 Avr 2005 20:47

YuGiOhJCJ a écrit:J'ai mis TTF_Font *font; en global et maintenant ya plus l'erreur cool. J'utiliserai maintenant la technique avec le return; pour voir...

Maintenant ya encore une erreur...Je pense que j'utilise mal la fonction qui sert à afficher le texte. J'ai du mal comprendre la doc que j'ai lu.
Je sais qu'il faut utiliser la fonction:
TTF_Render_Solid();

mais je pense que les argument que j'ai mis dedans sont mauvais. Tu sais t'en servir?
[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: OK c bon

Messagede YuGiOhJCJ le 05 Avr 2005 20:48

YuGiOhJCJ a écrit:
YuGiOhJCJ a écrit:J'ai mis TTF_Font *font; en global et maintenant ya plus l'erreur cool. J'utiliserai la technique avec le return; pour voir...

Mais ya encore une erreur...Je pense que j'utilise mal la fonction qui sert à afficher le texte. J'ai du mal comprendre la doc que j'ai lu.
Je sais qu'il faut utiliser la fonction:
TTF_Render_Solid();

mais je pense que les argument que j'ai mis dedans sont mauvais. Tu sais t'en servir?
[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 6trouille le 05 Avr 2005 21:31

Bon ba j'y connasi toujours rien au SDL et autres codages informatique (à mon grand regret :cry: ) mais t'as l'ai de bien t'amuser, même si t'es un peu seul sur le sujet pour l'instant.

Donc j'arrête de polluer ce sujet avec du HS et te souhaite bonne chance car je sens que ce SDL te réserve bien d'autres problème :oui:
La vitesse de la lumière étant supérieure à la vitesse du son, il est normal que certains paraissent brillants avant d'ouvrir la bouche ;)
Avatar de l’utilisateur
6trouille
Gourou Star Ocean
Gourou Star Ocean
 
Messages: 23713
Inscription: 07 Mar 2005 21:47
Localisation: Somewhere
Le jeu qui vous a fait connaître le site: Star Ocean 'till the End of Time

Créé un topic

Messagede YuGiOhJCJ le 06 Avr 2005 00:42

Oh il ne faut pas te décourager. Mais place plutôt un topic te concernant. Spécial pour parler entre débutants. Tu raconte comment tu essayes de démarrer. Et on va t'aider. Tu commence un topic en disant "Je veux commencer à programmer en SDL. Que me faut-il faire?". Et là on va te guider...

Pour mon problème, c résolu. J'ai lu des docs et en fait ce qu'il me manquait c'était la couleur de la police et aussi la fonction SDL_BlitSurface() qu'il faut utiliser (comme lorsque j'affichait les BMP). ça marche comme ça:

Code: Tout sélectionner
   /*Chargement des variables couleur des polices*/
   SDL_Color fc;

   /*Chargement du texte sur la surface fenêtre*/
   sfc_texte=TTF_RenderText_Solid(font, "Blablabla", fc);

   /*Définition des couleurs du texte*/
   fc.r = 255;
   fc.g = 0;
   fc.b = 0;
   
   /*Affichage du texte sur la surface fenêtre*/
   SDL_BlitSurface(sfc_texte, NULL, sfc_fenetre, NULL);


Merci pour tout ;-)

Maintenant je sais:
Afficher des BMP, Afficher du texte et utiliser les evennements claviers :pouce:

Ca avance vite!
[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 6trouille le 06 Avr 2005 08:29

Merci pour la proposition mais le truc c'est qu'en fait j'ai pas le temps de m'y consacrer :oui:

Et puis mon PC perso (donc pas celui que j'utilise en ce moment au boulot) est un vieux coucou sur le point de rendre l'âme.

Donc si un jour je change de matos et que je me sens motivé, ba je passerai sans doute par ici :oui:
La vitesse de la lumière étant supérieure à la vitesse du son, il est normal que certains paraissent brillants avant d'ouvrir la bouche ;)
Avatar de l’utilisateur
6trouille
Gourou Star Ocean
Gourou Star Ocean
 
Messages: 23713
Inscription: 07 Mar 2005 21:47
Localisation: Somewhere
Le jeu qui vous a fait connaître le site: Star Ocean 'till the End of Time

Messagede moi1392 le 06 Avr 2005 09:08

Si t'es motivé YuGiOhJCJ tu peux jeter un coup d'oeil à SDL_mixer dans la partie téléchargements, j'ai pas encore écrit de tutorial dessus mais le code est assez simple, comme ca tu pourras en plus jouer des musiques et faire des bruitages !! :)
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Cool

Messagede YuGiOhJCJ le 06 Avr 2005 12:09

Cool c justement ce qui me manque!
Avec la musique, mes jeux seront mieux :roll:

Il faut que je m'y mette aussi...Je vé y jeter un oeuil.
[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

taille de la police

Messagede YuGiOhJCJ le 16 Avr 2005 11:46

Il me manque quand même un truc important:
Comment choisir la taille du texte(en px) ?

Est-ce que c'est un truc du style:
Code: Tout sélectionner
   /*Définition de la taille du texte*/
   fg.size = 12;


Tu sais comment on fait?
[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 Avr 2005 11:52

Code: Tout sélectionner
font=TTF_OpenFont("font.ttf", 16);


voila, tu spécifie la taille quand tu ouvres ta font !! :)
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

yes

Messagede YuGiOhJCJ le 17 Avr 2005 13:33

Ah oui exact. :pouce:
Ce qui est dommage c'est que les retour à la ligne "\n" ne fonctionnent pas dans la ligne:
sfc_texte=TTF_RenderText_Solid(font, "Le retour à la ligne\n ne marche pas", fg);

Je vais devoir créer une surface texte pour chaque retour à la ligne que je veux faire... :cry:

Ya pas d'autres solutions que tu connais?
[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 Avr 2005 23:49

pas vraiment non... a moi d'aller retoucher le code de SDL_ttf (ça ne doit pas être sorcier à priori...)
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

n00b

Messagede YuGiOhJCJ le 18 Avr 2005 12:57

j'ai encore du mal à lire les *.h.
Désolé si ça te demande du travail... #-o
J'en ai déjà regardé mais g pas compris grand chose.
C certainement la dedans qu'on écrit des structures et des fonctions...
[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 Avr 2005 15:32

:) ca viendra... moi maintenat je lis de plus en plus facilement les codes sources des autres...

C'est pratique quand on est dans le "libre", parce que quand quelque chose ne va pas comme on veut, on chope les sources, on regarde comment c'est fait, et on tente de modifier tout ça pour voir ce que ça donne...

Bon, ça ne marche pas à tous les coups (ça marche même pas souvent du tout :D).. mais c'est quand même sympa !!

Pour SDL_ttf, contentes toi pour l'instant d'écrire ligne par ligne.. et quand tu comprendra mieux comment ça marche, tu pourras toi aussi regarder les sources !! en plus avec Debian, rien de plus simple :

Code: Tout sélectionner
apt-get source nom_du_package
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Suivante

Retourner vers Besoin d'aide en SDL ?

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron