Ecrire du texte avec SDL_ttf - Programmation - Lecture ... - resoo.org
Ecrire du texte avec SDL_ttf - Programmation - Lecture ... - resoo.org
Ecrire du texte avec SDL_ttf - Programmation - Lecture ... - resoo.org
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong><br />
Je suis persuadé que la plupart d'entre vous se sont déjà<br />
posés cette question : "Mais bon sang il n'y a aucune fonction<br />
pour écrire <strong>du</strong> <strong>texte</strong> dans une fenêtre <strong>SDL</strong> "<br />
Il est temps de vous apporter la réponse : c'est non<br />
Bien sûr, si c'était vraiment "non" le chapitre s'arrêterait là et<br />
j'aurais écrit le plus court chapitre de l'histoire <strong>du</strong> Site <strong>du</strong><br />
Zér0<br />
Alors qu'en est-il <br />
Auteur : M@teo21<br />
Créé le : 20/05/2006 à 22h12<br />
Modifié le : 20/05/2006 à<br />
22h20<br />
Noter et commenter ce tutorial<br />
Imprimer ce tutorial<br />
En fait, la <strong>SDL</strong> ne propose vraiment aucune fonction pour écrire <strong>du</strong> <strong>texte</strong> dans la fenêtre, je ne vous ai pas menti.<br />
Mais il y a quand même toujours moyen d'y arriver, il suffit d'utiliser... la ruse ! Et pour cela vous avez 2 solutions :<br />
Vous ne pouvez pas écrire de <strong>texte</strong>, mais vous avez le droit de blitter des images. On peut donc créer un<br />
bitmap pour chacun des lettres d'alphabet (de A à Z). Vous n'auriez qu'à coder une fonction qui assemblerait<br />
ces bitmaps dans une <strong>SDL</strong>_Surface en fonction <strong>du</strong> <strong>texte</strong> que vous lui envoyez en paramètre.<br />
Cependant, cette première solution est un peu lourde à mettre en place. Il y a plus simple : utiliser la<br />
librairie <strong>SDL</strong>_<strong>ttf</strong>. C'est une librairie qui vient s'ajouter par-dessus la <strong>SDL</strong>, tout comme <strong>SDL</strong>_image. Son rôle est<br />
de créer une <strong>SDL</strong>_Surface contenant le <strong>texte</strong> que vous lui envoyez.<br />
Nous allons donc dans ce chapitre apprendre à manier <strong>SDL</strong>_<strong>ttf</strong> pour pouvoir écrire <strong>du</strong> <strong>texte</strong> dans la fenêtre<br />
Sommaire <strong>du</strong> chapitre :<br />
Installer <strong>SDL</strong>_<strong>ttf</strong><br />
Chargement de <strong>SDL</strong>_<strong>ttf</strong><br />
Les différentes méthodes d'écriture<br />
Q.C.M.<br />
Installer <strong>SDL</strong>_<strong>ttf</strong><br />
Il faut savoir que, comme <strong>SDL</strong>_image, <strong>SDL</strong>_<strong>ttf</strong> est une librairie qui nécessite que la <strong>SDL</strong> soit installée.<br />
Bon, si à ce stade <strong>du</strong> cours vous n'avez toujours pas installé la <strong>SDL</strong> c'est grave, donc je vais supposer que ça c'est fait<br />
Tout comme <strong>SDL</strong>_image, <strong>SDL</strong>_<strong>ttf</strong> est une des librairies liées à la <strong>SDL</strong> les plus populaires (c'est-à-dire qu'elle est très<br />
téléchargée). Comme vous allez pouvoir le constater, cette librairie est effectivement bien faite. Une fois que vous<br />
aurez appris à l'utiliser, vous ne pourrez plus vous en passer !<br />
1 sur 19 23/08/2007 02:10
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
Comment fonctionne <strong>SDL</strong>_<strong>ttf</strong> <br />
<strong>SDL</strong>_<strong>ttf</strong> n'utilise pas des images bitmap pour générer <strong>du</strong> <strong>texte</strong> dans des <strong>SDL</strong>_Surface. C'est une méthode en effet<br />
assez lourde à mettre en place et on n'aurait pu utiliser qu'une seule police.<br />
En fait, <strong>SDL</strong>_<strong>ttf</strong> fait appel à une autre librairie : Freetype. C'est une librairie capable de lire les fichiers de police<br />
(.<strong>ttf</strong>) et d'en sortir l'image. <strong>SDL</strong>_<strong>ttf</strong> récupère donc cette "image" et la convertit pour la <strong>SDL</strong> en créant une<br />
<strong>SDL</strong>_Surface.<br />
Point important : <strong>SDL</strong>_<strong>ttf</strong> a donc besoin de la librairie Freetype pour fonctionner, sinon elle ne sera pas capable de<br />
lire les fichiers .<strong>ttf</strong>.<br />
Si vous êtes sous Windows et que vous prenez, comme je le fais, la version "compilée" de la librairie, vous<br />
n'aurez pas besoin de télécharger quoi que ce soit de Freetype car cette librairie sera incluse dans la DLL<br />
<strong>SDL</strong>_<strong>ttf</strong>.dll. Bref, vous n'avez rien à faire.<br />
Si vous êtes sous Linux ou Mac OS et que vous devez recompiler la librairie, il vous faudra en revanche<br />
Freetype pour compiler. Rendez-vous sur la page de téléchargement de Freetype pour récupérer les fichiers<br />
pour développeurs.<br />
Installer <strong>SDL</strong>_<strong>ttf</strong><br />
Rendez-vous sur la page de téléchargement de <strong>SDL</strong>_<strong>ttf</strong>.<br />
Là, choisissez le fichier qu'il vous faut dans la section "Binary".<br />
Sous Windows, vous remarquerez qu'il n'y a que deux fichiers zip ayant le suffixe "win32" et "VC6".<br />
Le premier (win32) contient la DLL que vous aurez besoin de livrer <strong>avec</strong> votre exécutable. Vous aurez aussi<br />
besoin de mettre cette DLL dans le dossier de votre projet pour pouvoir tester votre programme<br />
évidemment<br />
Le second (VC6) contient les .h et .lib dont vous allez avoir besoin pour programmer. On pourrait penser<br />
d'après le nom que ça n'est fait que pour Visual-C++. C'est vrai. Mais en fait, rassurez-vous,<br />
exceptionnellement le fichier .lib livré ici marche aussi <strong>avec</strong> mingw32 , donc il fonctionnera sous<br />
Code::Blocks et Dev-C++.<br />
Le fichier ZIP contient comme d'habitude un dossier include et un dossier lib. Mettez le contenu <strong>du</strong> dossier include<br />
dans mingw32/include/<strong>SDL</strong> et le contenu <strong>du</strong> dossier lib dans mingw32/lib (c'est un fichier .lib et non un .a, mais<br />
comme je vous ai dit exceptionnellement ce fichier marche <strong>avec</strong> le compilateur mingw).<br />
Vous devez copier le fichier <strong>SDL</strong>_<strong>ttf</strong>.h dans le dossier mingw32/include/<strong>SDL</strong> et non pas dans<br />
mingw32/include tout court.<br />
Attention aux erreurs !<br />
Configurer un projet pour <strong>SDL</strong>_<strong>ttf</strong><br />
Eh bien c'est long hein !<br />
Il nous reste une dernière petite chose à faire : configurer notre projet pour qu'il utilise bien <strong>SDL</strong>_<strong>ttf</strong>. Il va falloir<br />
modifier les options <strong>du</strong> linker pour qu'il compile bien votre programme en utilisant la librairie <strong>SDL</strong>_<strong>ttf</strong>.<br />
Vous avez déjà appris à faire cette opération pour la <strong>SDL</strong> et pour <strong>SDL</strong>_image, je vais donc aller plus vite.<br />
Comme je travaille sous Code::Blocks, je vais vous donner la procé<strong>du</strong>re <strong>avec</strong> cet IDE. Ce n'est pas bien différent <strong>avec</strong><br />
les autres IDE :<br />
Rendez-vous dans le menu Project / Build Options<br />
2 sur 19 23/08/2007 02:10
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
3 sur 19 23/08/2007 02:10<br />
Dans l'onglet "Linker", cliquez sur le petit bouton "Add".<br />
Indiquez où se trouve le fichier <strong>SDL</strong>_<strong>ttf</strong>.lib (chez moi c'est dans C:\Program Files\CodeBlocks\mingw32\lib)<br />
On vous demande "Keep this as a relative path ". Peu importe ce que vous répondez, ça marchera dans les<br />
deux cas. Je vous conseille quand même de répondre Non, car sinon votre projet ne fonctionnera plus si vous<br />
le déplacez de dossier.<br />
Validez en cliquant sur OK : c'est bon<br />
Mais... On n'a pas besoin de linker <strong>avec</strong> la librairie Freetype <br />
Non, car comme je vous l'ai dit Freetype est incluse dans la DLL de <strong>SDL</strong>_<strong>ttf</strong>. Vous n'avez pas à vous préoccuper de<br />
Freetype, c'est <strong>SDL</strong>_<strong>ttf</strong> qui gère ça maintenant<br />
La documentation<br />
Maintenant que vous commencez à devenir des programmeurs aguerris, vous devriez vous demander immédiatement<br />
: "Mais où est la doc "<br />
Si vous ne vous êtes pas encore posé cette question, c'est que vous n'êtes pas encore un programmeur aguerri<br />
Bien sûr, vous vous dites : "Il y a toujours les tutos de tonton M@teo pour apprendre à s'en servir". C'est vrai : je vais<br />
vous apprendre à vous en servir dans ce chapitre. Toutefois :<br />
Je ne vais pas faire un tuto pour toutes les librairies qui existent (même en y passant ma vie je n'aurais pas le<br />
temps). Il va donc falloir tôt ou tard lire une doc, et mieux vaut commencer à apprendre à le faire<br />
maintenant !<br />
D'autre part, une librairie est en général assez complexe et contient beaucoup de fonctions. Je ne peux pas<br />
présenter toutes ces fonctions dans un tuto, ce serait bien trop long !<br />
En clair : une doc c'est complet mais un peu <strong>du</strong>r à comprendre quand on n'a pas l'habitude, un tuto c'est pas complet<br />
mais ça aide bien à démarrer, surtout quand on débute<br />
Je vous conseille donc de mettre dans vos favoris l'adresse suivante :<br />
http://jcatki.no-ip.<strong>org</strong>/<strong>SDL</strong>_<strong>ttf</strong>/<br />
C'est l'adresse de la doc de <strong>SDL</strong>_<strong>ttf</strong>. Elle est disponible en plusieurs formats : HTML en ligne, HTML zippé, PDF etc.<br />
Prenez la version qui vous arrange le plus<br />
Vous verrez que <strong>SDL</strong>_<strong>ttf</strong> est une librairie très simple : il y a peu de fonctions.<br />
Environ 40-50 fonctions, c'est peu (je vous dis pas combien il y en a dans la <strong>SDL</strong> ou dans des librairies plus complexes<br />
que nous étudierons plus tard comme QT !). Bref, ça devrait être signe (pour le programmeur aguerri que vous êtes<br />
) que cette librairie est simple et que vous saurez la manier assez vite.<br />
Allez, il est temps d'apprendre à utiliser <strong>SDL</strong>_<strong>ttf</strong> maintenant<br />
L'include<br />
Chargement de <strong>SDL</strong>_<strong>ttf</strong><br />
Avant toute chose, il faut ajouter l'include suivant en haut de votre fichier .c :
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
Code : C<br />
#include <br />
Si vous avez des erreurs de compilation à ce stade, vérifiez si vous avez bien placé le fichier <strong>SDL</strong>_<strong>ttf</strong>.h dans le dossier<br />
mingw32/include/<strong>SDL</strong> et non dans mingw32/include tout court.<br />
Démarrage de <strong>SDL</strong>_<strong>ttf</strong><br />
Tout comme la <strong>SDL</strong>, <strong>SDL</strong>_<strong>ttf</strong> a besoin d'être démarrée et arrêtée.<br />
Il y a donc des fonctions très similaires à la <strong>SDL</strong> :<br />
TTF_Init : démarre <strong>SDL</strong>_<strong>ttf</strong>.<br />
TTF_Quit : arrête <strong>SDL</strong>_<strong>ttf</strong>.<br />
Il n'est pas nécessaire que la <strong>SDL</strong> soit démarrée avant <strong>SDL</strong>_<strong>ttf</strong>.<br />
Pour démarrer <strong>SDL</strong>_<strong>ttf</strong> (on dit aussi "initialiser"), on doit donc appeler la fonction TTF_Init().<br />
Aucun paramètre n'est nécessaire. La fonction renvoie -1 s'il y a eu une erreur.<br />
Vous pouvez donc démarrer <strong>SDL</strong>_<strong>ttf</strong> très simplement comme ceci :<br />
Code : C<br />
TTF_Init();<br />
(<strong>du</strong>r de faire plus simple avouez )<br />
Si vous voulez vérifier s'il y a une erreur et être ainsi plus rigoureux, utilisez ce code à la place :<br />
Code : C<br />
if(TTF_Init() == -1)<br />
{<br />
fprintf(stderr, "Erreur d'initialisation de TTF_Init : %s\n", TTF_GetError());<br />
exit(EXIT_FAILURE);<br />
}<br />
S'il y a eu une erreur au démarrage de <strong>SDL</strong>_<strong>ttf</strong>, un fichier stderr.txt sera créé (sous Windows <strong>du</strong> moins) contenant un<br />
message explicatif de l'erreur.<br />
Pour ceux qui se poseraient la question : la fonction TTF_GetError() renvoie le dernier message d'erreur de <strong>SDL</strong>_<strong>ttf</strong>.<br />
C'est pour cela qu'on l'utilise dans le fprintf.<br />
Arrêt de <strong>SDL</strong>_<strong>ttf</strong><br />
Pour arrêter <strong>SDL</strong>_<strong>ttf</strong>, on appelle TTF_Quit(). Là encore, pas de paramètre, pas de prise de tête<br />
Vous pouvez appeler TTF_Quit avant ou après <strong>SDL</strong>_Quit, peu importe.<br />
Code source (attention c'est <strong>du</strong> haut niveau !) :<br />
Code : C<br />
4 sur 19 23/08/2007 02:10
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
5 sur 19 23/08/2007 02:10<br />
TTF_Quit();<br />
Ca va vous suivez toujours <br />
Chargement d'une police<br />
Bon tout ça c'est bien beau mais c'est pas assez compliqué, c'est pas rigolo.<br />
Passons aux choses sérieuses si vous le voulez bien !<br />
Maintenant que <strong>SDL</strong>_<strong>ttf</strong> est chargée, nous devons charger une police.<br />
Une fois que cela sera fait, nous pourrons enfin voir comment écrire <strong>du</strong> <strong>texte</strong> !<br />
Là encore il y a 2 fonctions :<br />
TTF_OpenFont : ouvre un fichier de police (.<strong>ttf</strong>)<br />
TTF_CloseFont : ferme une police ouverte.<br />
TTF_OpenFont doit stocker son résultat dans une variable de type TTF_Font. Vous devez créer un pointeur de<br />
TTF_Font, comme ceci :<br />
Code : C<br />
TTF_Font *police = NULL;<br />
Le pointeur police contiendra donc les informations sur la police une fois qu'on l'aura ouverte.<br />
La fonction TTF_OpenFont prend 2 paramètres :<br />
Le nom <strong>du</strong> fichier de police (au format .<strong>ttf</strong>) à ouvrir. L'idéal c'est de mettre le fichier de police dans le<br />
répertoire de votre projet. Exemple de fichier : arial.<strong>ttf</strong> (pour la police Arial).<br />
La taille de la police à utiliser. Vous pouvez par exemple utiliser une taille de 22.<br />
Ce sont les mêmes tailles que celles que vous avez dans un logiciel de <strong>texte</strong> comme Word.<br />
Où trouver des polices .<strong>ttf</strong> <br />
Sur votre ordinateur<br />
Vous en avez déjà sur votre ordinateur !<br />
Si vous êtes sous Windows, vous en trouverez déjà plein dans le dossier C:/Windows/Fonts<br />
Vous n'avez qu'à copier le fichier de police qui vous plaît dans le dossier de votre projet.<br />
Attention : si le nom contient des caractères "bizarres" comme des espaces, des accents ou même des majuscules, je<br />
vous conseille de le renommer. Pour être sûr de n'avoir aucun problème, n'utilisez que des minuscules.<br />
Exemple de nom incorrect : TIMES NEW ROMAN.TTF<br />
Exemple de nom correct : times.<strong>ttf</strong><br />
Sur Internet
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
6 sur 19 23/08/2007 02:10<br />
Autre possibilité : récupérer une police sur Internet. Vous trouverez pas mal de sites proposant des polices gratuites<br />
et originales à télécharger.<br />
Testez un coup de Google "polices", vous allez voir le résultat. Il y a de quoi faire !<br />
Je connais de nombreux bons sites, et si personnellement je devais n'en retenir qu'un ce serait dafont.com. C'est<br />
bien classé, très bien fourni et varié. Que demande le peuple<br />
Voici un aperçu de polices que vous pourrez trouver très facilement là-bas :<br />
C'est que <strong>du</strong> bonheur<br />
Bon, retour à la programmation<br />
Allez, on va utiliser la police Angelina elle me plaît bien<br />
On ouvre la police comme ceci :<br />
Code : C<br />
police = TTF_OpenFont("angelina.<strong>ttf</strong>", 65);<br />
La police utilisée sera angelina.<strong>ttf</strong>. J'ai bien pris soin de mettre le fichier dans le dossier de mon projet et de le<br />
renommer pour qu'il soit tout en minuscules.<br />
La police sera de taille 65. Ca paraît gros mais visiblement c'est une police qu'il faut écrire en gros pour qu'on puisse<br />
la voir<br />
Ce qui est très important, c'est que TTF_OpenFont stocke le résultat dans la variable police. Vous allez réutiliser<br />
cette variable tout à l'heure en écrivant <strong>du</strong> <strong>texte</strong>. Elle permettra d'indiquer la police que vous voulez utiliser pour<br />
écrire <strong>du</strong> <strong>texte</strong>.<br />
Vous pouvez ouvrir plusieurs polices à la fois.<br />
Vous n'avez pas besoin d'ouvrir une même police à chaque fois que vous écrivez <strong>du</strong> <strong>texte</strong> : ouvrez la police<br />
juste une fois au début <strong>du</strong> programme et fermez-la à la fin.<br />
Fermer la police<br />
Il faut penser à fermer chaque police ouverte avant l'appel à TTF_Quit().<br />
Dans mon cas, ça donnera donc le code suivant :<br />
Code : C
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
7 sur 19 23/08/2007 02:10<br />
TTF_CloseFont(police); /* Doit être avant TTF_Quit() */<br />
TTF_Quit();<br />
Et voilà l'travail<br />
Code source pour résumer<br />
On résume tout ce qu'on vient d'apprendre sur le "chargement" de <strong>SDL</strong>_<strong>ttf</strong> à l'aide d'un petit code source complet<br />
histoire de se situer. Les lignes intéressantes sont commentées :<br />
Code : C<br />
#include <br />
#include <br />
#include <br />
#include /* Ne pas oublier l'include ! */<br />
int main(int argc, char *argv[])<br />
{<br />
<strong>SDL</strong>_Surface *ecran = NULL;<br />
<strong>SDL</strong>_Event event;<br />
TTF_Font *police = NULL; /* Stockera les informations de police */<br />
int continuer = 1;<br />
<strong>SDL</strong>_Init(<strong>SDL</strong>_INIT_VIDEO);<br />
TTF_Init(); /* Initialisation (peut être avant ou après <strong>SDL</strong>_Init) */<br />
ecran = <strong>SDL</strong>_SetVideoMode(640, 480, 32, <strong>SDL</strong>_HWSURFACE | <strong>SDL</strong>_DOUBLEBUF);<br />
<strong>SDL</strong>_WM_SetCaption("Gestion <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong>", NULL);<br />
police = TTF_OpenFont("angelina.<strong>ttf</strong>", 65); /* Ouverture de la police au début */<br />
while (continuer)<br />
{<br />
<strong>SDL</strong>_WaitEvent(&event);<br />
switch(event.type)<br />
{<br />
case <strong>SDL</strong>_QUIT:<br />
continuer = 0;<br />
break;<br />
}<br />
}<br />
<strong>SDL</strong>_FillRect(ecran, NULL, <strong>SDL</strong>_MapRGB(ecran->format, 255, 255, 255));<br />
<strong>SDL</strong>_Flip(ecran);<br />
TTF_CloseFont(police); /* Fermeture de la police avant TTF_Quit */<br />
TTF_Quit(); /* Arrêt de <strong>SDL</strong>_<strong>ttf</strong> (peut être avant ou après <strong>SDL</strong>_Quit, peu importe) */<br />
<strong>SDL</strong>_Quit();<br />
}<br />
return EXIT_SUCCESS;<br />
Les différentes méthodes d'écriture<br />
Maintenant que <strong>SDL</strong>_<strong>ttf</strong> est chargée et qu'on a une variable police chargée elle aussi, plus rien ni personne ne nous<br />
empêchera d'écrire <strong>du</strong> <strong>texte</strong> dans notre fenêtre <strong>SDL</strong> !<br />
Bon, écrire <strong>du</strong> <strong>texte</strong> c'est bien, mais <strong>avec</strong> quelle fonction
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
8 sur 19 23/08/2007 02:10<br />
J'ai été un peu surpris la première fois que j'ai vu la doc de <strong>SDL</strong>_<strong>ttf</strong> : 12 fonctions pour écrire <strong>du</strong> <strong>texte</strong>, ça en fait <strong>du</strong><br />
choix !<br />
En fait, il y a 3 façons différentes pour <strong>SDL</strong>_<strong>ttf</strong> de dessiner <strong>du</strong> <strong>texte</strong> :<br />
Solid : c'est la technique la plus rapide. Le <strong>texte</strong> sera rapidement écrit dans une <strong>SDL</strong>_Surface. La surface sera<br />
transparente mais n'utilisera qu'un niveau de transparence (on a appris ça il y a quelques chapitres). C'est<br />
pratique, mais le <strong>texte</strong> ne sera pas très joli, pas très "arrondi" surtout s'il est écrit gros. Utilisez cette<br />
technique lorsque vous devez souvent changer le <strong>texte</strong> (par exemple pour afficher le temps qui s'écoule ou le<br />
nombre de FPS d'un jeu).<br />
Shaded : cette fois, le <strong>texte</strong> sera joli. Les lettres seront antialiasées, le <strong>texte</strong> apparaîtra plus lisse. Il y a un<br />
défaut par contre : le fond doit être d'une couleur unie. Pas moyen de rendre le fond de la <strong>SDL</strong>_Surface<br />
transparente en Shaded.<br />
Blended : c'est la technique la plus puissante, mais elle est lente. En fait, elle met autant de temps que<br />
Shaded à créer la <strong>SDL</strong>_Surface. La seule différence <strong>avec</strong> Shaded, c'est que vous pouvez blitter le <strong>texte</strong> sur une<br />
image et la transparence sera respectée (contrairement à Shaded qui imposait un fond uni). Attention : le<br />
calcul <strong>du</strong> blit sera plus lent que pour Shaded.<br />
C'est là que la différence de lenteur <strong>avec</strong> Shaded se fait : au moment <strong>du</strong> blit et non au moment de la création<br />
de la <strong>SDL</strong>_Surface.<br />
J'ai mis un peu de temps à m'habituer à ces 3 types d'écriture <strong>du</strong> <strong>texte</strong>.<br />
Pour vous aider à vous faire une idée, voici des screenshots d'un même <strong>texte</strong> écrit <strong>avec</strong> ces différentes techniques :<br />
Solid<br />
Mode d'écriture très rapide mais pas très beau (<strong>texte</strong> non lissé).
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
9 sur 19 23/08/2007 02:10<br />
Shaded<br />
Mode d'écriture lent mais plus joli car antialisé. Fond obligatoirement uni.<br />
Blended<br />
Mode d'écriture lent (et blit lent) mais très beau car antialisé et fonctionne sur un fond non uni.<br />
En résumé :<br />
Si vous avez un <strong>texte</strong> qui change souvent, comme un compte à rebours, utilisez Solid.<br />
Si votre <strong>texte</strong> ne change pas très souvent et que vous voulez blitter votre <strong>texte</strong> sur un fond uni, utilisez<br />
Shaded.<br />
Si votre <strong>texte</strong> ne change pas très souvent mais que vous voulez blitter sur un fond non uni (comme une<br />
image), utilisez Blended.<br />
Voilà, vous devriez déjà être un peu plus familier <strong>avec</strong> ces 3 types d'écriture de <strong>SDL</strong>_<strong>ttf</strong>.<br />
Je vous avais dit qu'il y avait 12 fonctions en tout.<br />
En effet, pour chacun de ces 3 types d'écriture, il y a 4 fonctions. Chaque fonction écrit le <strong>texte</strong> à l'aide d'un charset<br />
différent, c'est-à-dire d'une palette de caractères différentes. Il y en a 4 :
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
Latin1<br />
UTF8<br />
Unicode<br />
Unicode Glyph<br />
L'idéal est d'utiliser l'Unicode car c'est un charset gérant la quasi-totalité des caractères existant sur Terre (eh ouais<br />
ça en fait <strong>avec</strong> toutes les langues ).<br />
Toutefois, utiliser l'Unicode n'est pas toujours forcément simple (un caractère prend plus que la taille d'un char en<br />
mémoire), nous ne verrons pas comment l'utiliser ici.<br />
A priori, si votre programme est écrit en français le mode Latin1 suffit amplement, vous pouvez vous contenter de<br />
celui-là<br />
Les 3 fonctions utilisant le charset Latin1 sont :<br />
TTF_RenderText_Solid<br />
TTF_RenderText_Shaded<br />
TTF_RenderText_Blended<br />
Vous savez tout, ou presque<br />
Nous allons voir comment écrire un <strong>texte</strong> en Blended (c'est le plus joli )<br />
Exemple d'écriture de <strong>texte</strong> en Blended<br />
Pour spécifier une couleur à <strong>SDL</strong>_<strong>ttf</strong>, on ne va pas utiliser le même type qu'<strong>avec</strong> la <strong>SDL</strong> (un Uint32 créé à l'aide de la<br />
fonction <strong>SDL</strong>_MapRGB).<br />
Au contraire, nous allons utiliser une structure toute prête de la <strong>SDL</strong> : <strong>SDL</strong>_Color. Cette structure comporte 3<br />
sous-variables : la quantité de rouge, de vert et de bleu.<br />
Si vous voulez créer une variable couleurNoire, vous devrez donc écrire :<br />
Code : C<br />
<strong>SDL</strong>_Color couleurNoire = {0, 0, 0};<br />
Attention à ne pas confondre <strong>avec</strong> les couleurs qu'utilise habituellement la <strong>SDL</strong> !<br />
La <strong>SDL</strong> utilise des Uint32 créés à l'aide de <strong>SDL</strong>_MapRGB.<br />
<strong>SDL</strong>_<strong>ttf</strong> utilise des <strong>SDL</strong>_Color.<br />
On va écrire un <strong>texte</strong> en noir dans une <strong>SDL</strong>_Surface <strong>texte</strong> :<br />
Code : C<br />
<strong>texte</strong> = TTF_RenderText_Blended(police, "Salut les Zér0s !", couleurNoire);<br />
Vous voyez dans l'ordre les paramètres à envoyer : la police (de type TTF_Font), le <strong>texte</strong> à écrire, et enfin la couleur<br />
(de type <strong>SDL</strong>_Color).<br />
Le résultat est stocké dans une <strong>SDL</strong>_Surface. <strong>SDL</strong>_<strong>ttf</strong> calcule automatiquement la taille nécessaire à donner à la<br />
surface en fonction de la taille <strong>du</strong> <strong>texte</strong> et <strong>du</strong> nombre de caractères que vous avez voulu écrire.<br />
10 sur 19 23/08/2007 02:10
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
Comme toute <strong>SDL</strong>_Surface, notre pointeur <strong>texte</strong> contient les sous-variables w et h indiquant<br />
respectivement sa largeur et sa hauteur.<br />
C'est donc un bon moyen de connaître les dimensions <strong>du</strong> <strong>texte</strong> une fois que celui-ci a été écrit dans la<br />
<strong>SDL</strong>_Surface. Vous n'aurez qu'à faire :<br />
Code : C<br />
<strong>texte</strong>->w /* Donne la largeur */<br />
<strong>texte</strong>->h /* Donne la hauteur */<br />
Code complet d'écriture de <strong>texte</strong><br />
Voilà vous savez tout<br />
Voici un code complet montrant l'écriture de <strong>texte</strong> en mode Blended :<br />
Code : C<br />
11 sur 19 23/08/2007 02:10
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
12 sur 19 23/08/2007 02:10<br />
#include <br />
#include <br />
#include <br />
#include <br />
#include <br />
int main(int argc, char *argv[])<br />
{<br />
<strong>SDL</strong>_Surface *ecran = NULL, *<strong>texte</strong> = NULL, *fond = NULL;<br />
<strong>SDL</strong>_Rect position;<br />
<strong>SDL</strong>_Event event;<br />
TTF_Font *police = NULL;<br />
<strong>SDL</strong>_Color couleurNoire = {0, 0, 0};<br />
int continuer = 1;<br />
<strong>SDL</strong>_Init(<strong>SDL</strong>_INIT_VIDEO);<br />
TTF_Init();<br />
ecran = <strong>SDL</strong>_SetVideoMode(640, 480, 32, <strong>SDL</strong>_HWSURFACE | <strong>SDL</strong>_DOUBLEBUF);<br />
<strong>SDL</strong>_WM_SetCaption("Gestion <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong>", NULL);<br />
fond = IMG_Load("moraira.jpg");<br />
/* Chargement de la police */<br />
police = TTF_OpenFont("angelina.<strong>ttf</strong>", 65);<br />
/* Ecriture <strong>du</strong> <strong>texte</strong> dans la <strong>SDL</strong>_Surface "<strong>texte</strong>" en mode Blended (optimal) */<br />
<strong>texte</strong> = TTF_RenderText_Blended(police, "Salut les Zér0s !", couleurNoire);<br />
while (continuer)<br />
{<br />
<strong>SDL</strong>_WaitEvent(&event);<br />
switch(event.type)<br />
{<br />
case <strong>SDL</strong>_QUIT:<br />
continuer = 0;<br />
break;<br />
}<br />
<strong>SDL</strong>_FillRect(ecran, NULL, <strong>SDL</strong>_MapRGB(ecran->format, 255, 255, 255));<br />
position.x = 0;<br />
position.y = 0;<br />
<strong>SDL</strong>_BlitSurface(fond, NULL, ecran, &position); /* Blit <strong>du</strong> fond */<br />
}<br />
position.x = 60;<br />
position.y = 370;<br />
<strong>SDL</strong>_BlitSurface(<strong>texte</strong>, NULL, ecran, &position); /* Blit <strong>du</strong> <strong>texte</strong> par-dessus */<br />
<strong>SDL</strong>_Flip(ecran);<br />
TTF_CloseFont(police);<br />
TTF_Quit();<br />
<strong>SDL</strong>_FreeSurface(<strong>texte</strong>);<br />
<strong>SDL</strong>_Quit();<br />
}<br />
return EXIT_SUCCESS;<br />
Et le résultat :
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
13 sur 19 23/08/2007 02:10<br />
Sympa n'est-ce pas <br />
Si vous voulez changer de mode d'écriture pour tester, il n'y a qu'une ligne à changer : celle créant la surface (<strong>avec</strong><br />
l'appel à la fonction TTF_RenderText_Blended).<br />
La fonction TTF_RenderText_Shaded prend un 4ème paramètre contrairement aux 2 autres. Ce<br />
dernier paramètre est la couleur de fond à utiliser. Vous devrez donc créer une autre variable de type<br />
<strong>SDL</strong>_Color pour indiquer une couleur de fond (par exemple le blanc).<br />
Attributs d'écriture <strong>du</strong> <strong>texte</strong><br />
Il est possible aussi de spécifier des attributs d'écriture, comme gras, italique et souligné.<br />
Il faut d'abord que la police soit chargée. Vous devriez donc avoir une variable police valide.<br />
Vous pouvez alors faire appel à la fonction TTF_SetFontStyle qui va modifier la police pour qu'elle soit en gras,<br />
italique ou souligné selon vos désirs.<br />
La fonction prend 2 paramètres :<br />
La police à modifier<br />
Une combinaison de flags pour indiquer le style à donner : gras, italique ou souligné.
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
14 sur 19 23/08/2007 02:10<br />
Pour les flags, vous devez utiliser ces constantes :<br />
TTF_STYLE_NORMAL : normal.<br />
TTF_STYLE_BOLD : gras.<br />
TTF_STYLE_ITALIC : italique.<br />
TTF_STYLE_UNDERLINE : souligné.<br />
Comme c'est une liste de flags, vous pouvez les combiner à l'aide <strong>du</strong> symbole | comme on a appris à le faire.<br />
Testons :<br />
Code : C<br />
/* Chargement de la police */<br />
police = TTF_OpenFont("angelina.<strong>ttf</strong>", 65);<br />
/* Le <strong>texte</strong> sera écrit en italique et souligné */<br />
TTF_SetFontStyle(police, TTF_STYLE_ITALIC | TTF_STYLE_UNDERLINE);<br />
/* Ecriture <strong>du</strong> <strong>texte</strong> en italique et souligné */<br />
<strong>texte</strong> = TTF_RenderText_Blended(police, "Salut les Zér0s !", couleurNoire);<br />
Résultat, le <strong>texte</strong> est écrit en italique et souligné :<br />
Pour restaurer une police à son état normal, il suffit de refaire appel à TTF_SetFontStyle en utilisant cette fois le<br />
flag TTF_STYLE_NORMAL.
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
15 sur 19 23/08/2007 02:10<br />
Exercice : le compteur<br />
Cet exercice va cumuler ce que vous avez appris dans ce chapitre et dans le chapitre sur la gestion <strong>du</strong> temps.<br />
Votre mission, si vous l'acceptez, consistera à créer un compteur qui s'incrémentera tous les dixièmes de seconde.<br />
Ce compteur va donc progressivement afficher :<br />
0<br />
100<br />
200<br />
300<br />
400<br />
etc.<br />
Au bout d'une seconde je veux voir affiché 1000, au bout d'une seconde et demie je veux voir affiché 1500 etc.<br />
Astuce pour écrire dans une chaîne<br />
Pour réaliser cet exercice, vous aurez besoin de savoir comment écrire dans une chaîne de caractères en mémoire.<br />
En effet, vous devez donner un char* à TTF_RenderText mais vous ce que vous aurez c'est un nombre (un int par<br />
exemple). Comment convertir un nombre en chaîne de caractères <br />
On peut utiliser la fonction sprintf.<br />
Elle marche de la même manière que fprintf, sauf qu'au lieu d'écrire dans un fichier elle écrit dans une chaîne (le "s"<br />
de sprintf signifie "string", c'est-à-dire "chaîne" en anglais).<br />
Le premier paramètre que vous lui donnerez sera donc un pointeur sur un tableau de char.<br />
Veillez à réserver suffisamment d'espace pour le tableau de char si vous ne voulez pas déborder en<br />
mémoire !<br />
Exemple :<br />
Code : C<br />
sprintf(temps, "Temps : %d", compteur);<br />
Ici, temps est un tableau de char (20 caractères), et compteur est un int qui contient le temps.<br />
Après cette instruction, la chaîne temps contiendra par exemple "Temps : 500"<br />
Allez au boulot !<br />
Correction<br />
Voici une correction possible de l'exercice :<br />
Code : C
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
16 sur 19 23/08/2007 02:10<br />
int main(int argc, char *argv[])<br />
{<br />
<strong>SDL</strong>_Surface *ecran = NULL, *<strong>texte</strong> = NULL;<br />
<strong>SDL</strong>_Rect position;<br />
<strong>SDL</strong>_Event event;<br />
TTF_Font *police = NULL;<br />
<strong>SDL</strong>_Color couleurNoire = {0, 0, 0}, couleurBlanche = {255, 255, 255};<br />
int continuer = 1;<br />
int tempsActuel = 0, tempsPrecedent = 0, compteur = 0;<br />
char temps[20] = ""; /* Tableau de char suffisamment grand */<br />
<strong>SDL</strong>_Init(<strong>SDL</strong>_INIT_VIDEO);<br />
TTF_Init();<br />
ecran = <strong>SDL</strong>_SetVideoMode(640, 480, 32, <strong>SDL</strong>_HWSURFACE | <strong>SDL</strong>_DOUBLEBUF);<br />
<strong>SDL</strong>_WM_SetCaption("Gestion <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong>", NULL);<br />
/* Chargement de la police */<br />
police = TTF_OpenFont("angelina.<strong>ttf</strong>", 65);<br />
/* Initialisation <strong>du</strong> temps et <strong>du</strong> <strong>texte</strong> */<br />
tempsActuel = <strong>SDL</strong>_GetTicks();<br />
sprintf(temps, "Temps : %d", compteur);<br />
<strong>texte</strong> = TTF_RenderText_Shaded(police, temps, couleurNoire, couleurBlanche);<br />
while (continuer)<br />
{<br />
<strong>SDL</strong>_PollEvent(&event);<br />
switch(event.type)<br />
{<br />
case <strong>SDL</strong>_QUIT:<br />
continuer = 0;<br />
break;<br />
}<br />
<strong>SDL</strong>_FillRect(ecran, NULL, <strong>SDL</strong>_MapRGB(ecran->format, 255, 255, 255));<br />
tempsActuel = <strong>SDL</strong>_GetTicks();<br />
if (tempsActuel - tempsPrecedent >= 100) /* Si 100ms au moins se sont écoulées */<br />
{<br />
compteur += 100; /* On rajoute 100ms au compteur */<br />
sprintf(temps, "Temps : %d", compteur); /* On écrit dans la chaîne "temps" le nouveau temps */<br />
<strong>SDL</strong>_FreeSurface(<strong>texte</strong>); /* On supprime la surface précédente de la mémoire avant d'en charger une nouvelle<br />
(IMPORTANT) */<br />
<strong>texte</strong> = TTF_RenderText_Shaded(police, temps, couleurNoire, couleurBlanche); /* On écrit la chaine temps<br />
dans la <strong>SDL</strong>_Surface */<br />
tempsPrecedent = tempsActuel; /* On met à jour le tempsPrecedent */<br />
}<br />
}<br />
position.x = 180;<br />
position.y = 210;<br />
<strong>SDL</strong>_BlitSurface(<strong>texte</strong>, NULL, ecran, &position); /* Blit <strong>du</strong> <strong>texte</strong> contenant le temps */<br />
<strong>SDL</strong>_Flip(ecran);<br />
TTF_CloseFont(police);<br />
TTF_Quit();<br />
<strong>SDL</strong>_FreeSurface(<strong>texte</strong>);<br />
<strong>SDL</strong>_Quit();<br />
}<br />
return EXIT_SUCCESS;<br />
Voici ce que ça donne au bout de 13,9 secondes très exactement
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
17 sur 19 23/08/2007 02:10<br />
Télécharger le projet (437 Ko)<br />
Ce n'est pas parfait, on pourrait par exemple utiliser <strong>SDL</strong>_Delay pour éviter d'utiliser 100% <strong>du</strong> CPU.<br />
Pour aller plus loin<br />
Si vous voulez améliorer ce petit bout de programme, vous pouvez essayer d'en faire un jeu où il faut cliquer le plus<br />
de fois possible dans la fenêtre <strong>avec</strong> la souris dans un temps imparti. Un compteur s'incrémentera à chaque clic de la<br />
souris.<br />
Un compte à rebours doit s'afficher. Lorsqu'il atteint 0, on récapitule le nombre de clics effectués et on demande si<br />
on veut faire une nouvelle partie.<br />
Vous pouvez aussi gérer les meilleurs scores en les enregistrant dans un fichier. Ca vous fera travailler à nouveau la<br />
gestion des fichiers en C<br />
Bon courage !<br />
Q.C.M.<br />
De quel librairie se sert <strong>SDL</strong>_<strong>ttf</strong> pour fonctionner
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
nmlkj <strong>SDL</strong>_image<br />
nmlkj <strong>ttf</strong>_reader<br />
nmlkj Freetype<br />
Dans quelle ordre les fonctions doivent être appelées <br />
nmlkj TTF_Init, TTF_OpenFont, TTF_RenderText_Solid, TTF_CloseFont, TTF_Quit<br />
nmlkj TTF_Init, TTF_OpenFont, TTF_CloseFont, TTF_RenderText_Solid, TTF_Quit<br />
nmlkj TTF_OpenFont, TTF_Init, TTF_RenderText_Solid, TTF_Quit, TTF_CloseFont<br />
nmlkj TTF_Init, TTF_OpenFont, TTF_CloseFont, TTF_Quit, TTF_RenderText_Solid<br />
Lequel de ces modes d'écriture ne gère pas la transparence <br />
nmlkj TTF_RenderText_Blended<br />
nmlkj TTF_RenderText_Solid<br />
nmlkj TTF_RenderText_Shaded<br />
Quel est le type de variable retourné par TTF_RenderText_Blended <br />
nmlkj TTF_Font<br />
nmlkj <strong>SDL</strong>_Surface<br />
nmlkj <strong>SDL</strong>_Color<br />
Correction !<br />
Vous savez maintenant tout ce qu'il faut pour écrire <strong>du</strong> <strong>texte</strong> dans une fenêtre <strong>SDL</strong><br />
Mine de rien, vous commencez à en savoir beaucoup sur la <strong>SDL</strong>. Nous aurons bientôt fini d'en faire le tour.<br />
Nous devons toutefois apprendre à gérer le son (nos programmes sont muets pour le moment) et faire encore<br />
quelques TP pour bien comprendre comment on s'y prend pour créer des jeux en C.<br />
Lorsque nous en aurons fini <strong>avec</strong> la <strong>SDL</strong>, nous passerons au C++. En effet, nous n'avons fait que <strong>du</strong> C jusqu'ici, et nous<br />
ne connaissons toujours rien <strong>du</strong> langage C++ ! Nous y viendrons donc dans quelques chapitres, lorsque la partie III sur<br />
la <strong>SDL</strong> sera terminée.<br />
Auteur : M@teo21<br />
Noter et commenter ce tutorial<br />
Imprimer ce tutorial<br />
18 sur 19 23/08/2007 02:10
<strong>Ecrire</strong> <strong>du</strong> <strong>texte</strong> <strong>avec</strong> <strong>SDL</strong>_<strong>ttf</strong> - <strong>Programmation</strong> - <strong>Lecture</strong> <strong>du</strong> tutoriel - Le... http://www.site<strong>du</strong>zero.com/tuto-3-7420-1-ecrire-<strong>du</strong>-<strong>texte</strong>-<strong>avec</strong>-sdl_<strong>ttf</strong>.html<br />
19 sur 19 23/08/2007 02:10