Ferrero
23/04/2007, 16h16
Ca y est, j'ai décider de me fendre d'un petit tutoriel sur OSLib Extension.
Aujourd'hui nous allons voir comment marche les pixels fonts.
OSLib de base, permet de gérer le texte, mais il faut avouer (désolé Brunni) qu'il n'est pas très sexy à l'écran.
Avec OSLibE, on peut afficher du texte à l'écran à partir de caractères définis dans une image (comme au bon vieux temps des amigas et des ST)
1 - La table de caractères
Ce qu'il nous faut tout d'abord, c'est une image contenant les caractères dont nous avons besoin (voila celle que j'ai utilisé) :
http://img406.imageshack.us/img406/2499/font2is1.png
Il faut bien noter la largeur et la hauteur d'un caractère (ici 32 pixels) car nous en aurons besoin plus tard.
2 - Le code
//La librairie principale OSLibExtesion
#include "oslibe.h"
//les callbacks
PSP_MODULE_INFO("OSLib Extension Sample", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
int main()
{
OSLE_PIXELFONT* font = NULL;
OSL_CONTROLLER* Keys;
char* texte = "PIXELS FONTS POWA";
short posTexte;
//Initialisation de la librairie
oslInit(0);
//Initialisation du mode graphique
oslInitGfx(OSL_PF_8888, 1);
//Initialisation de la console texte
oslInitConsole();
// Creation de la pixel font
font = osleCreatePixelFont("datas\\gfx\\font2.png", 32, 32, "ABCDEFGHIJKLM!()NOPQRSTUVWXYZ");
// Calcul de la position du texte (au mileu de l'écran)
posTexte = (480 - oslePixelFontGetWidth(font, texte)) / 2;
while (!osl_quit)
{
//Permet de dessiner
oslStartDrawing();
//Lit les touches
Keys = oslReadKeys();
//Efface l'écran
oslCls();
//affiche sur l'écran du texte
oslePixelFontDrawSimple(font, posTexte, 100, texte);
// Fin du Dessin
oslEndDrawing();
// Synchronisation de l'écran
oslSyncFrame();
}
//on libère les pixels fonts
osleDeletePixelFont(font);
//on quitte l'application
oslEndGfx();
oslQuit();
return 0;
}
Ici, ce va être rapide car presque tout le code est issu des exemples standards d'OSLib.
La première instruction spécifique à OSLibE est :
font = osleCreatePixelFont("datas\\gfx\\font2.png", 32, 32, "ABCDEFGHIJKLM!()NOPQRSTUVWXYZ");
Cela permet de charger l'image contenant les caratères de la police. Le premier paramètre est le nom de l'image. Le deuxième et le troisième sont, respectivement, la largeur et la hauteur de chaques caractères. Enfin le dernier paramètre est la liste des caractères présent dans l'image.
Grâce à cette instruction, OSLibE analyse l'image et associe chaque "sprite" à un caractère. De plus, chaque sprite est ensuite analysé afin de trouver la "vraie" largeur d'un caractère (par exemple un i est moins large qu'un w.)
Ensuite, l'instruction oslePixelFontGetWidth(font, texte) permet de connaitre la largeur du texte demandé. Le permier paramètre est le pixels font à utiliser, et le second le texte dont la longueur est cherchée.
Enfin pour dessiner du texte, il suffit d'appeler l'instruction oslePixelFontDrawSimple(font, posTexte, 100, texte); .
Ici, le premier paramètre est le pixels font à utiliser. Le deuxième et le troisième sont les coordonnées à l'écran. Enfin le dernier paramètre est le texte à afficher.
Il y a quand même quelque chose de plus à faire : La libération.
Comme pour Oslib, il faut libérer ce que l'on a créer, donc ici pour libérer une pixels font, il faut appeler osleDeletePixelFont(font);
3 - Résultat
http://img50.imageshack.us/img50/8538/screened9.png
Aujourd'hui nous allons voir comment marche les pixels fonts.
OSLib de base, permet de gérer le texte, mais il faut avouer (désolé Brunni) qu'il n'est pas très sexy à l'écran.
Avec OSLibE, on peut afficher du texte à l'écran à partir de caractères définis dans une image (comme au bon vieux temps des amigas et des ST)
1 - La table de caractères
Ce qu'il nous faut tout d'abord, c'est une image contenant les caractères dont nous avons besoin (voila celle que j'ai utilisé) :
http://img406.imageshack.us/img406/2499/font2is1.png
Il faut bien noter la largeur et la hauteur d'un caractère (ici 32 pixels) car nous en aurons besoin plus tard.
2 - Le code
//La librairie principale OSLibExtesion
#include "oslibe.h"
//les callbacks
PSP_MODULE_INFO("OSLib Extension Sample", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
int main()
{
OSLE_PIXELFONT* font = NULL;
OSL_CONTROLLER* Keys;
char* texte = "PIXELS FONTS POWA";
short posTexte;
//Initialisation de la librairie
oslInit(0);
//Initialisation du mode graphique
oslInitGfx(OSL_PF_8888, 1);
//Initialisation de la console texte
oslInitConsole();
// Creation de la pixel font
font = osleCreatePixelFont("datas\\gfx\\font2.png", 32, 32, "ABCDEFGHIJKLM!()NOPQRSTUVWXYZ");
// Calcul de la position du texte (au mileu de l'écran)
posTexte = (480 - oslePixelFontGetWidth(font, texte)) / 2;
while (!osl_quit)
{
//Permet de dessiner
oslStartDrawing();
//Lit les touches
Keys = oslReadKeys();
//Efface l'écran
oslCls();
//affiche sur l'écran du texte
oslePixelFontDrawSimple(font, posTexte, 100, texte);
// Fin du Dessin
oslEndDrawing();
// Synchronisation de l'écran
oslSyncFrame();
}
//on libère les pixels fonts
osleDeletePixelFont(font);
//on quitte l'application
oslEndGfx();
oslQuit();
return 0;
}
Ici, ce va être rapide car presque tout le code est issu des exemples standards d'OSLib.
La première instruction spécifique à OSLibE est :
font = osleCreatePixelFont("datas\\gfx\\font2.png", 32, 32, "ABCDEFGHIJKLM!()NOPQRSTUVWXYZ");
Cela permet de charger l'image contenant les caratères de la police. Le premier paramètre est le nom de l'image. Le deuxième et le troisième sont, respectivement, la largeur et la hauteur de chaques caractères. Enfin le dernier paramètre est la liste des caractères présent dans l'image.
Grâce à cette instruction, OSLibE analyse l'image et associe chaque "sprite" à un caractère. De plus, chaque sprite est ensuite analysé afin de trouver la "vraie" largeur d'un caractère (par exemple un i est moins large qu'un w.)
Ensuite, l'instruction oslePixelFontGetWidth(font, texte) permet de connaitre la largeur du texte demandé. Le permier paramètre est le pixels font à utiliser, et le second le texte dont la longueur est cherchée.
Enfin pour dessiner du texte, il suffit d'appeler l'instruction oslePixelFontDrawSimple(font, posTexte, 100, texte); .
Ici, le premier paramètre est le pixels font à utiliser. Le deuxième et le troisième sont les coordonnées à l'écran. Enfin le dernier paramètre est le texte à afficher.
Il y a quand même quelque chose de plus à faire : La libération.
Comme pour Oslib, il faut libérer ce que l'on a créer, donc ici pour libérer une pixels font, il faut appeler osleDeletePixelFont(font);
3 - Résultat
http://img50.imageshack.us/img50/8538/screened9.png