Documente Academic
Documente Profesional
Documente Cultură
Introducción
Para comenzar, debo precisar que es necesario un correcto conocimiento de
C/C++ y que Allegro debe ya estar correctamente instalado.
- Durante todo el tutorial, los prototipos de las funciones propias de Allegro
serán mostradas en negritas.
- /* Los comentarios se mostrarán en un azul verdoso muy
característico */
- Los tipos de variables en marrón (int, float, …) incluyendo los tipos de
variables específicos de Allegro (BITMAP, DATAFILE, …)
- Las estructuras de control en azul (if, else, while, {}, …)
- Los números en rojo (0, 1, 324, 4, …)
- Los comandos del preprocesador en verde (#define, #include)
- “Las cadenas de caracteres en gris”
Muy importante, antes de hacer lo que sea con la librería, hay que llamar la
función de inicialización.
/* Inicializa el ratón */
install_mouse();
Aquí, la cosa se pone más interesante: si la función fracasa, devuelve -1, sino,
devuelve el número de botones del ratón que Allegro puede manejar. Es
importante efectuar una verificación puesto que los usuarios de DOS no
necesariamente tienen un controlador de ratón que funcione… Entonces podemos
escribir:
set_gfx_mode(GFX_AUTODETECT,640,480,0,0);
if(key[KEY_ENTER])
printf(“La tecla Enter está oprimida \n”);
if(key[KEY_SPACE])
printf(“La barra espaciadora está oprimida \n”);
¡No nos olvidemos de salir del programa!
Quizás se haya dado cuenta que las aplicaciones de Windows tienen su punto de
entrada en WinMain y no en main. Es por eso que la macro END_OF_MAIN() es
necesaria: permita utilizar la función main sin importar el SO. Escríbala justo al
final de la función main y no tendrá ninguna advertencia o error a la hora de
compilar. ¡Nada de que preocuparse!
4. Gráficos en pantalla
4.1. Presentación general
Pasaremos ahora a la parte de los gráficos en pantalla, sin duda la parte más
importante. Para esto, mostraremos un disco blanco desplazándose hacia la
derecha de la pantalla. Estará exactamente a la mitad de la altura de nuestra
pantalla. El usuario deberá presionar ENTER para lanzar el disco. Modifiquemos,
pues, nuestro ciclo de espera (el que verifica que la tecla ESC no esté oprimida):
Ahora, si ejecuta el programa, se dará cuenta que hay unos horribles parpadeos
en la pantalla. De hecho, no vemos un disco, sino una sucesión de líneas negras y
blancas. ¡Realmente no es el efecto que buscábamos! ¿Entonces, dónde está el
problema? Es muy sencillo, para programar correctamente un juego, no debemos
jamás escribir directamente sobre la pantalla, a menos que no nos importe para
nada el resultado, pero ese no es nuestro caso. Utilizaremos, pues, un nuevo
modo de impresión en pantalla, el “double buffering”. El principio es muy básico:
en vez de dibujar en la pantalla, dibujaremos en un mapa de bits que tendremos
guardado en la memoria principal (RAM). Luego, al final de nuestro ciclo,
copiaremos de golpe el contenido de ese mapa de bits (hablamos del buffer) en la
pantalla. No es el método que da los resultados más espectaculares, pero ¡será
mucho mejor! Definamos de una vez por todas el tipo BITMAP (podrá encontrar la
declaración en los archivos de cabecera de la librería):
buffer = create_bitmap(SCREN_W,SCREEN_H);
circle_pos_x += 0.1;
//Movemos el círculo a la derecha 0.1 píxeles
Normalmente podríamos modificar este puntero hacia cualquier otra fuente, pero
esto no nos es muy útil por el momento ya que no sabemos cómo cargarlas.
El resultado es perfecto: ¡No más cuadro negro! ¿Pero como funciona? Pues, todo
texto impreso se divide en dos partes: la frontal (el texto en sí) y la parte trasera,
que es un cuadro rodeando los caracteres de nuestro texto. Por defecto, este
cuadro es negro, y es por eso que no se había dado cuenta (planee muy bien la
sorpresa, ¿verdad?), pero si el texto se imprime sobre otro color este cuadro es
perfectamente visible.
Veamos la función text_mode:
text_mode(makecol(255,255,255) );
Hay sin embargo un detalle. Para no mostrar este cuadro, es decir tener un efecto
de transparencia, hay que utilizar el color -1. Pero hay que tener mucho cuidado,
ya que text_mode se aplicará a todas las funciones de impresión de texto
subsiguientes. Por ende, hay que definir un color de fondo cada vez que le haga
falta. Por ejemplo en nuestro programa, a partir de la segunda ocurrencia del ciclo,
¡todos los textos serán mostrados en transparencia!
Bueno, ahora tiene todas las herramientas necesarias para mostrar texto en
pantalla, durante sus programas. No dude pues en usar todas las funciones, nada
vale tanto como la práctica y la experiencia personal.
Hemos dibujado un disco… ¿No sería mejor imprimir una imagen de verdad?
(Hablamos entonces de un sprite)