FAQ Allegro
FAQ AllegroConsultez toutes les FAQ
Nombre d'auteurs : 3, nombre de questions : 29, création le 10 mai 2013
Allegro dispose principalement de deux fonctions pour afficher du texte à l'écran :
void
textout_ex
(
BITMAP *
bitmap, const
FONT *
font, const
char
*
string, int
x, int
y, int
color, int
background);
--> Permet d'afficher une chaîne de caractères sans formatage.
void
textprintf_ex
(
BITMAP *
bitmap, const
FONT *
font, int
x, int
y, int
color, int
background, const
char
*
format, ...);
--> Permet d'afficher une chaîne de caractères avec formatage ; l'utilisation étant la même que les fonctions de type printf.
Examinons tout d'abord la fonction textout_ex et ses arguments :
- bitmap est le bitmap sur lequel la chaîne va être écrite ;
- font est la police de caractères utilisée pour écrire le message ; Allegro fournit une police standard appelée font ;
- string est la chaîne de caractères à afficher ;
- x et y sont les coordonnées où va être placée la chaîne de caractères ;
- color est la couleur du texte ; pour définir une couleur, il faut utiliser la macro makecol(r, g, b) ;
- background est la couleur de fond du texte ; on peut mettre une couleur de fond par exemple avec makecol ou mettre un fond transparent en passant la valeur -1.
Note : si vous utilisez une version archaïque d'Allegro (par exemple la 4.0.X), ou même si vous lisez des tutoriels Allegro un peu anciens, il se peut que vous tombiez sur la fonction textout au lieu de textout_ex. Pas de panique, textout est toujours présente dans les nouvelles versions d'Allegro même si elle est dépréciée. La seule différence entre textout et textout_ex est l'absence d'argument background.
Voici un exemple d'utilisation de textout_ex
/* On suppose qu'Allegro est correctement initialisé */
/* On définit une chaîne à afficher */
char
chaine[] =
"
Ceci est un test d'affichage de texte
"
;
/* On l'affiche sur l'écran en (10, 10) avec la police par défaut, en blanc sur fond transparent */
textout_ex
(
screen, font, chaine, 10
, 10
, makecol
(
255
, 255
, 255
), -
1
);
/* On fait une pause de 5 secondes pour admirer le résultat */
rest
(
5000
);
Examinons maintenant textprintf_ex et ses arguments :
- bitmap, font, x, y, color, background et string ;
- sont les mêmes que précédemment ;
- ... sont les arguments additionnels en cas de formatage de la chaîne.
La fonction textprintf_ex fonctionne de la même manière que printf pour ce qui est du formatage de chaîne. Si vous voulez placer un entier dans le message par exemple, il suffit de spécifier %d dans la chaîne, puis votre entier dans les arguments additionnels.
Note : même remarque que précédemment concernant textprintf, que vous pourrez retrouver si vous utiliser une ancienne version d'Allegro ou d'un tutoriel.
Voici un exemple d'utilisation de textout_ex :
/* On suppose qu'Allegro est correctement initialisé */
/* On définit une chaîne à afficher */
char
chaine[] =
"
Test du formatage. On affiche un entier : %d, un flottant : %f, un caractere : %c
"
;
/* Puis quelques variables à placer dedans */
int
entier =
15
;
float
flottant =
3
.14f
;
char
caractere =
'
c
'
;
/* On l'affiche sur l'écran en (10, 10) avec la police par défaut, en blanc sur fond transparent
On place les paramètres additionnels dans leur ordre d'apparition dans la chaîne de formatage */
textprintf_ex
(
screen, font, 10
, 10
, makecol
(
255
, 255
, 255
), -
1
, chaine, entier, flottant, caractere);
/* On fait une pause de 5 secondes pour admirer le résultat */
rest
(
5000
);
Pour obtenir un affichage correct des caractères spéciaux tels que les accents, il faut changer le format d'encodage des caractères avec la fonction suivante :
void
set_uformat(int
type);
Pour gérer correctement les accents, on pourra par exemple passer en paramètre U_ASCII, qui définit le mode ASCII étendu (8 bits). Les autres encodages possibles sont U_ASCII_CP, U_UNICODE et U_UTF8.
ATTENTION : bien que l'on puisse changer l'encodage des caractères à la volée, ce n'est pas conseillé. Si l'on souhaite utiliser la fonction set_uformat, il est conseillé de l'appeler avant l'initialisation d'Allegro (allegro_init) et de ne plus y toucher par la suite.
En effet, les chaînes chargées avant et après l'appel à cette fonction risquent d'être incompatibles du fait d'une représentation mémoire différente.