09.01.2015 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!