Outils pour utilisateurs

Outils du site


allegro:addon_fonts

Allegro — Polices de caractères

Chargement des fontes Bitmap

Dans cet exemple, on va utiliser cette fonte: silver_font.png (les glyphes sont en blanc, donc elles se voient mal).
Une fonte Bitmap doit respecter un certain format :

  • On doit avoir une couleur de fond sur tout le bitmap (par exemple le rose bonbon (FF, 00, FF)
  • Toutes glyphes (lettre) doivent avoir la même hauteur (mais pas forcément la même largeur)
  • Chaque glyphe est séparée des autres par au moins 1px de la couleur de fond (rose)
  • Chaque glyphe est représentée en couleurs sur fond transparent
  • Vos glyphes doivent avoir la taille que vous souhaitez utiliser dans votre jeu (sinon dessinez dans un bitmap que vous agrandirez)
  • Vos glyphes doivent comporter les pixels d'espacement entre les lettre (en général ou on une bande transparente à droite et sous le glyphe)
  • à cause du fond des glyphes transparent, on préfèrera le format TGA ou PNG (sinon utilisez un masque et passez-le en alpha avec al_convert_mask_to_alpha).
#include <allegro5/allegro.h>
#include <allegro5/allegro_font.h>
 
ALLEGRO_FONT * init_font(void) {
   ALLEGRO_PATH *path;
   ALLEGRO_FONT *font;
   ALLEGRO_BITMAP *bmp;
   int ranges[] = {' ', '~'};
 
   al_init_font_addon(); /* initialize the font addon */
 
   path = al_get_standard_path(ALLEGRO_RESOURCES_PATH);
   al_append_path_component(path, "resources");
   al_set_path_filename(path, "font.tga");
 
   if ((bmp = al_load_bitmap(al_path_cstr(path, '/'))) == NULL) return NULL;
   al_destroy_path(path);
 
   font = al_grab_font_from_bitmap(bmp, 1, ranges); /* load the font */
   al_destroy_bitmap(bmp); /* now you can destroy the bitmap */
 
   return font;
}

Cette fonction renvoie une fonte prête à l'emploi ou NULL en cas d'échec.

   int ranges[] = {' ', '~'};

Regardez notre font.png, les glyphes représentées sont les caractères ascii de ' ' à '~', cette variables contient les bornes (par paires) des caractères représentées par les glyphes, les valeurs peuvent être en unicode puisque allegro les supporte !

Ensuite on charge un bitmaps avec la même méthode que celle de l'article sur les bitmaps.

al_grab_font_from_bitmap prend en paramètres le bitmap, le nombre de bornes (taille de ranges divisée par 2) et les bornes. Elle renvoie NULL en cas d'échec.

P.S. pour créer vos fontes ceci peux vous intéresser : BMFont.
Fontes bitmap présentes sur ce site.

Chargement des fontes TTF

Ce greffon permet de charger des fontes TTF pour les utiliser avec les fonctions du greffon Font : celui-ci doit donc être initialisé en premier.

Ce greffon est dépendant de la bibliothèque logicielle FreeType2, ce qui ne pose pas de problème sous Linux où est est généralement disponible, elle doit être packagée avec votre jeu dans pour pouvoir le redistribuer sous Windows. Des builds sont disponibles à cette adresse : http://gnuwin32.sourceforge.net/packages/freetype.htm

L'avantage est que le greffon gère tous les formats supportés par cette lib, c'est à dire la plupart !

#include <allegro5/allegro.h>
#include <allegro5/allegro_font.h>
#include <allegro5/allegro_ttf.h>
 
ALLEGRO_FONT * init_font(void) {
   ALLEGRO_PATH *path;
   ALLEGRO_FONT *font;
 
   al_init_font_addon(); /* initialize the font addon */
   if (!al_init_ttf_addon()) return NULL; /* initialize the ttf (True Type Font) addon */
 
   path = al_get_standard_path(ALLEGRO_RESOURCES_PATH);
   al_append_path_component(path, "resources");
   al_set_path_filename(path, "myfont.ttf");
 
   font al_load_ttf_font(al_path_cstr(path, '/'), 72, ALLEGRO_TTF_MONOCHROME); /* load the font */
   al_destroy_path(path);
 
   return font;
}

al_load_ttf_font Prend en paramètre le path vers le fichier TTF, la taille en pixels ainsi qu'un booléen comportant deux flags :

  • ALLEGRO_TTF_NO_KERNING — empêche tout crénage sur la police
  • ALLEGRO_TTF_MONOCHROME — Fonte monochrome (pas de niveaux de gris = pas d'anti-aliasing)

Pour changer la taille, il faut regarder la fonte en réutilisant cette fonction avec une taille différente.

Dessiner du texte

Rien de plus simple :

   float x = 0, y = 0;
   al_draw_text(font, al_map_rgb(0, 0, 0), x, y, 0, "Hello World !");

Elle prend en paramètres :

  • La fonte
  • Une couleur pour teindre (si c'est une bitmap en couleurs, mettre #FFFFFF(blanc) pour ne pas teindre)
  • les coordonnées X, Y du coin supérieur gauche où sera dessiné le texte
  • Une valeur pour changer l'alignement du texte parmi :
    • ALLEGRO_ALIGN_LEFT (ou 0)
    • ALLEGRO_ALIGN_CENTRE X, Y est le coin supérieur au “\\milieu\\”
    • ALLEGRO_ALIGN_RIGHT X, Y est le coin supérieur droit
  • La chaine à afficher.

C.F. http://liballeg.org/a5docs/trunk/font.html

Fonte de débogage

Depuis la 5.0.8, Allegro vient avec une font bitmap intégrée pour afficher des informations de débogage (en effet la taille des glyphes sont de 8×8 pixels).

Le bitmap est enregistré dans la mémoire, mais la fonte n'est pas créée, vous devez demander à Allegro de le faire puis vous devez la détruire lorsque votre jeu se ferme.

ALLEGRO_FONT *dbg_font = al_create_builtin_font();
/* ... code ... */
al_destroy_font(dbg_font);

Le jeu de caractères est le suivant :

  • caractères ASCII
  • Latin 1
  • Extended A
  • Symbole €uro

Liste des greffons

allegro/addon_fonts.txt · Dernière modification: 2018/09/06 18:16 par mrhide