preguntilla sobre allegro y las fuentes

Temas relacionados con la programación y la actualización audiovisual
User avatar
ruboslav
Usuario avanzado
Posts: 156
Joined: Thu Oct 21, 2004 4:01 pm

preguntilla sobre allegro y las fuentes

Postby ruboslav » Wed May 18, 2005 11:41 pm

Mirad la función para escribir un texto en Allegro es algo asi:

textout(screen,font,"ejemplo de texto",300,150,palette_color[15]);

Guay, mi pregunta es ¿cómo hago para cambiar la fuente? en este caso font es la fuente por defecto (la de consola, vamos) pero ¿y si quiero poner una mia? ¿en que formato ha de estar (fnt, ttf o qué)?. Es que ni siquiera se que tipo de parámetro es fnt ¿un puntero que apunta al fichero de las fuentes o qué?. Bueno, espero no haber dicho muchas chorradas juntas :shock: . Gracias y saludos.
User avatar
Babul
Usuario avanzado
Posts: 64
Joined: Thu Mar 10, 2005 4:17 pm

Postby Babul » Thu May 19, 2005 6:37 am

He encontrado esto:

¿Dónde puedo encontrar fuentes para usar con Allegro?
Grabber puede importarlas directamente de ficheros .fnt con formato GRX o BIOS, o puede dibujarlas usted en una imagen .pcx con cualquier programa. Busque en la página de Allegro una utilidad (ttf2pcx) que convierte fuentes Windows TrueType a formato .pcx.


Mira en esta página, tendrás que bajar hasta el apartado con el título:

Tipografia en Allegro

http://www.korsarios.net/archivos/2003_05.html
User avatar
Popolon
Usuario avanzado
Posts: 474
Joined: Tue May 13, 2003 2:31 pm
Location: Lloret de Mar
Contact:

Postby Popolon » Thu May 19, 2005 9:14 am

Aquí: http://www.deleveld.dds.nl/allegttf.htm

Os podeis descargar una librería para usar TTFs en Allegro.

Y ya que estamos, para los usuarios de SDL, lo mejor para utilizar TTF es SDL_ttf: http://www.libsdl.org/projects/SDL_ttf/
User avatar
ruboslav
Usuario avanzado
Posts: 156
Joined: Thu Oct 21, 2004 4:01 pm

Postby ruboslav » Thu May 19, 2005 12:58 pm

¿Alguien a usado alguna vez Grabber? cuando voy a importar la ttf el programa me da error y se sale. Lo he intentado con todos los formatos pcx,bitmap,tga... y nada siempre me da un error y se sale del programa.
User avatar
addax
Administrador
Posts: 905
Joined: Mon Mar 31, 2003 10:17 pm
Location: Madrid
Contact:

Postby addax » Thu May 19, 2005 1:54 pm

Inténtalo por e-mail o por mensaje privado (ya que así les avisará también a su e-mail) con IPerezG y RGranado, ya que ambos son gente allegro :D y el único problema es que suelen andar bastante liados últimamente y supongo que hace tiempo que no se han pasado, en caso contrario, seguro que ya te habrían echado una mano ;-)
Salu2,
Alex
Guest

Postby Guest » Thu May 19, 2005 3:59 pm

Hola, para cargar una fuente desde Allegro simplemente puedes usar
algo como esto:

Code: Select all

#include <allegro.h> int main(void) { FONT *f,*f1; PALETTE pal; allegro_init(); install_timer(); install_keyboard(); set_color_depth(8); set_gfx_mode(GFX_AUTODETECT,320,200,0,0); f=font; f1=load_font("font.pcx",pal,NULL); set_palette(pal); textout_ex(screen,f,"Tipo de letra por defecto.",10,10,makecol(250,250,250),-1); textout_ex(screen,f1,"Otro tipo de letra.",10,20,-1,-1); while(!key[KEY_ESC]); destroy_font(f1); return 0; }
En el ejemplo he usado la fuente Comic Sans de M$ convertida al formato de Allegro con el programa Font Editor http://ferisrv5.uni-mb.si/~ma0747/defau ... age=fonted.

Te cuento como las hacía yo cuando usaba 256 colores, ahora Allegro soporta fuentes con mas colores y no sé si habrá cambiado.

Me cogía la tabla ASCII y empezaba a partir del caracter 32 (el espacio) y dibujaba las letras 1 a 1 (pasaba de los caracteres especiales) usando el color magenta (r=255,g=0,b=255) como transparente y haciéndolo coincidir con el color 0, y se usaba el color 255 como límite de
la imagen (por eso parece que cada caracter de una fuente está como encajonado), una vez terminado lo grababa en un pcx y ya estaba.

Para meterlo en un fichero de datos, aunque el grabber está bien yo soy mas partidario de usar la utilidad dat que también viene con Allegro, más que nada porque es más rápido añadir objetos al fichero de datos.

Imaginando que tienes el fichero con el tipo de letra en el directorio actual usa:

dat data.dat -a -c1 -t FONT font.pcx

para crear un fichero de datos (data.dat) con la fuente, después con

dat data.dat -h data.h

creas una cabecera para usar el nombre del fichero en mayúsculas como índice para el fichero de datos, en este caso FONT_PCX.

Un ejemplillo, asumiendo que has hecho el fichero de datos y la cabecera:

Code: Select all

#include <allegro.h> #include "data.h" int main(void) { DATAFILE *df; allegro_init(); install_timer(); install_keyboard(); set_color_depth(8); set_gfx_mode(GFX_AUTODETECT,320,200,0,0); df=load_datafile("data.dat"); if (df==NULL) exit(-1); textout_ex(screen,df[FONT_PCX].dat,"Otro tipo de letra.",10,20,-1,-1); while(!key[KEY_ESC]); unload_datafile(df); return 0; }
Yo ahora mismo uso AlFont, que soporta tipos de letra True Type y otros cuantos más aunque aún no he sido capaz de meterlos en un fichero de datos :wink:

En algún Pixelate venían unos cuantos tipos de letra, aunque no recuerdo en cual: http://echellon.hybd.net/issues.php

En fin, espero que te aclares algo con este rollo. :D
User avatar
ruboslav
Usuario avanzado
Posts: 156
Joined: Thu Oct 21, 2004 4:01 pm

Postby ruboslav » Thu May 19, 2005 11:40 pm

Bueno, ahora es muy tarde y no esta mi cabeza para mirar código pero he descargado el font editor y puede ser la respuesta a mis plegarias. Gracias.
User avatar
benway
Usuario avanzado
Posts: 172
Joined: Sun Apr 03, 2005 1:22 pm
Location: Madrid

Postby benway » Fri May 20, 2005 12:23 am

Hola...

A ver si puedo aportar algo más...

Yo también uso el font editor, que es un programa genial. Te grabará la fuente como .pcx o .bmp, y luego la metes en el .dat con el grabber. Hasta ahí todo bien, luego la puedes utilizar poniendo...

DATAFILE *Fichero

Fichero = load_datafile ("ARCHIVO.DAT")

font = (FONT*) Fichero[NOMBRE_QUE_LE_DISTE_EN_GRABBER].dat

textout_ex (screen, font...)

o directamente con textout_ex (screen, (FONT*)Fichero[NOMBRE....

Un problema que tienes es que, cuando usas fuentes en color, AUNQUE ESTES TRABAJANDO EN MÁS DE 8 BITS de profundidad de color, necesitas activar la paleta del archivo bitmap donde tienes la fuente para que la presente con los colores que definiste en el font editor... no sé si me explico... Si no lo haces, usará los colores de la paleta por defecto en 8 bpp, aunque estés en un modo de pantalla de 32 bpp...

Si cargas la fuente directamente desde un archivo .pcx o .bmp no hay problema, pero si la cargas desde un dat, tienes que usar el comando load_dat_font. Yo programo en C++, y tengo una clase "Hardware" para controlar todas las rutinas del allegro. Para cambiar de fuente, tengo la función miembro "SetFont", cuyo código te copio a continuación

Code: Select all

void Hardware::SetFont (char *s1, char *s2) { FONT *Fuente; PALETTE pal; char *names[] = {s1, s2}; Fuente = load_dat_font("datos.dat", pal, names); set_palette (pal); font = Fuente; }
(Te pongo este código porque, si lo comparas con la ayuda de Allegro para el comando load_dat_font, verás que hay un error (por lo menos en la ayuda de la versión 4.2.0. Beta 2, que es la última y es la que uso yo...))

Al trabajar en 32 bpp no tienes que preocuparte porque el set_palette vaya a alterar los colores de la paleta actual... porque no existe paleta actual :wink:

Espero haberte sido de utilidad.
Un saludo.Image - Image
User avatar
benway
Usuario avanzado
Posts: 172
Joined: Sun Apr 03, 2005 1:22 pm
Location: Madrid

Postby benway » Fri May 20, 2005 1:15 pm

Menudo lapsus!

Se me olvidó decirte como llamar a esa función desde el código del juego...

Cuando estés en el grabber, le pones a las fuentes un nombre que acabe en "_DATA", y a la paleta de la fuente el mismo nombre que acabe en "_PAL" (por ejemplo) [Para hacer lo de la paleta, creas una nueva, le das a grab, y seleccionas el archivo del bitmap de la fuente]

Desde el código, luego pones Hardware->SetFont ("Fuente_que_quiero_DATA","Fuente_que_quiero_PAL");

Un saludo...
Un saludo.Image - Image
User avatar
ruboslav
Usuario avanzado
Posts: 156
Joined: Thu Oct 21, 2004 4:01 pm

Postby ruboslav » Thu Jun 30, 2005 8:04 pm

Mmmmh. Siguiendo con el tema del C y allegro... ¿Por qué me saltan estos warnings?

main2.c:10: warning: `textout' is deprecated (declared at C:/devcpp/include/allegro/alcompat.h:169)

main2.c:10: warning: passing arg 3 of `textout' makes pointer from integer without a cast

Aqui os dejo el código (que es una soberana sandez). Mirad:

Code: Select all

#include <allegro.h> #include <string.h> #define CURSORX0 10 #define CURSORXF 80 #define CURSORY0 10 int cursory; void escribe (frase){ textout (screen,font,frase,CURSORX0,cursory,palette_color[15]); cursory+=10; } main () { allegro_init(); cursory=CURSORY0; if (set_gfx_mode(GFX_SAFE,800,600,0,0)!=0){ set_gfx_mode(GFX_TEXT,0,0,0,0); allegro_message( "Incapaz de entrar a modo grafico\n%s\n", allegro_error); return 1; } escribe ("adios"); getch(); } END_OF_MAIN();
Gracias de antemano.
User avatar
traperic
Usuario avanzado
Posts: 75
Joined: Sun Apr 10, 2005 3:06 pm
Contact:

Postby traperic » Thu Jun 30, 2005 8:37 pm

En las versiones nuevas de Allegro, la función textout está en desuso y la sustituye textout_ex , es bueno que uses esta última ya que al final textout y todas las que ponen como 'deprecated' desaparecerán de la librería. A la función textout_ex le tienes que pasar como parámetro además de lo mismo que a textout el fondo del texto, (parámetro bg creo), que es lo que antes se especificaba con text_mode.

Lo del warning: es buena costumbre poner el tipo de dato y el nombre de la variable en la declaración y la definición de la función, en este caso escribe, prueba con :

void escribe (char *frase)
{
...
}

Y por último aunque esto no tan importante.... yo usaría clear_keybuf(); y readkey(); en lugar de getch(), ya que getch no es portable, pero bueno, esto es cosa tuya :wink:
User avatar
ruboslav
Usuario avanzado
Posts: 156
Joined: Thu Oct 21, 2004 4:01 pm

Postby ruboslav » Fri Jul 01, 2005 3:56 pm

O. Gracias. No sabia que existia textout_ex (y tantas otras funciones que iré mirando poco a poco). Tampoco sabia que getch() no fuese portable ¿estás seguro? :?. Lo digo porque no uso ninguna libreria rara.
User avatar
traperic
Usuario avanzado
Posts: 75
Joined: Sun Apr 10, 2005 3:06 pm
Contact:

Postby traperic » Fri Jul 01, 2005 7:01 pm

Tampoco sabia que getch() no fuese portable ¿estás seguro? . Lo digo porque no uso ninguna libreria rara.
Por no portable me refiero a que no sigue el estándar ANSI C, ya que es una función de conio.h, (no estoy seguro de porqué no se queja el compilador al no incluir esta cabecera), quizás Allegro la incluya en Windows con un

Code: Select all

#ifdef WIN32 #include <conio.h> #else ... #endif
o algo similar...

Yo sólo uso las funciones de la librería de C que puedes ver en esta página web http://c.conclase.net/librerias/index.php como regla general para la portabilidad y al menos entre windows y linux no tengo problemas.

Return to “Desarrollo”

Who is online

Users browsing this forum: No registered users and 3 guests