25/12/2021
Allegro es una biblioteca multiplataforma, libre y de código abierto, ideal para el desarrollo de videojuegos en C++. Si bien ofrece funcionalidades para audio, entrada y manejo de archivos, este artículo se centrará específicamente en su potencia para la programación gráfica, mostrando cómo trabajar exclusivamente en la pantalla gráfica con Allegro 4 y Allegro
Allegro 4 vs Allegro 5: Diferencias en la programación gráfica
Antes de adentrarnos en la programación, es importante destacar las diferencias clave entre Allegro 4 y Allegro 5 en el ámbito gráfico. Allegro 4 utiliza una API más sencilla y directa, ideal para principiantes, mientras que Allegro 5 presenta una arquitectura más moderna y flexible, basada en eventos y con soporte para OpenGL/Direct3D, lo que permite una mayor optimización y capacidad gráfica.
Característica | Allegro 4 | Allegro 5 |
---|---|---|
API | Más sencilla | Más moderna y compleja |
Aceleración gráfica | Software (con opciones para hardware mediante add-ons) | OpenGL/Direct3D (aceleración por hardware) |
Manejo de eventos | Menos robusto | Basado en eventos, más flexible |
Portabilidad | Buena, aunque con algunas limitaciones | Excelente, con soporte para múltiples plataformas |
A pesar de las diferencias, ambas versiones permiten realizar programación gráfica completa. A continuación, veremos ejemplos de cada una, centrándonos en lo esencial: la manipulación de la pantalla.
Programación gráfica con Allegro 4: Lo básico
Para trabajar con la pantalla gráfica en Allegro 4, necesitaremos funciones como set_gfx_mode
, clear_to_color
, y funciones de dibujo como circlefill
, line
, rectfill
, etc. Un ejemplo sencillo que dibuja círculos aleatorios:
#include <allegro.h>int main() { allegro_init(); install_keyboard(); set_color_depth(16); set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0); clear_to_color(screen, makecol(0, 128, 128)); while (!key[KEY_ESC]) { circlefill(screen, rand() % 640, rand() % 480, rand() % 64, makecol(rand() % 256, 0, 0)); } return 0;}
Este código inicia Allegro, configura el modo gráfico, borra la pantalla a un color azul verdoso y luego dibuja círculos rojos aleatorios hasta que se presiona la tecla Escape. La función set_gfx_mode
es crucial para definir la resolución y el modo de visualización (Ventana, Fullscreen, etc.).
Manejo de imágenes en Allegro 4
Allegro 4 ofrece soporte para varios formatos de imagen mediante add-ons. Para cargar e implementar imágenes necesitarás bibliotecas adicionales. Una vez instaladas, podrás usar funciones como load_bitmap
para cargar imágenes, y draw_sprite
para dibujarlas en la pantalla.
// ... (código de inicialización de Allegro 4) ...BITMAP imagen = load_bitmap("imagen.bmp", NULL); // Asegúrate de que 'imagen.bmp' existeif (imagen != NULL) { draw_sprite(screen, imagen, 100, 100); // Dibujar la imagen en la coordenada (100,100) // ... resto del código ...}
Recuerda que para utilizar el código anterior, deberás instalar las bibliotecas necesarias para el manejo de imágenes BMP. (o el formato que uses).
Programación gráfica con Allegro 5: Un enfoque más moderno
Allegro 5 utiliza un enfoque basado en eventos, lo que lo hace más flexible y potente. La gestión de la pantalla se realiza creando un ALLEGRO_DISPLAY
y manejando eventos para actualizar la pantalla. La inicialización de los add-ons es también diferente, se hace usando la función al_init_primitives_addon().
#include <allegro5/allegro.h>#include <allegro5/allegro_primitives.h>int main() { al_init(); al_install_keyboard(); al_init_primitives_addon(); ALLEGRO_DISPLAY display = al_create_display(640, 480); ALLEGRO_EVENT_QUEUE event_queue = al_create_event_queue(); ALLEGRO_EVENT event; al_register_event_source(event_queue, al_get_keyboard_event_source()); al_clear_to_color(al_map_rgb(0, 128, 128)); bool exit = false; while (!exit) { al_wait_for_event(event_queue, &event); if (event.type == ALLEGRO_EVENT_KEY_DOWN) { if (event.keyboard.keycode == ALLEGRO_KEY_ESCAPE) { exit = true; } } al_draw_filled_circle(rand() % 640, rand() % 480, rand() % 64, al_map_rgb(rand() % 256, 0, 0)); al_flip_display(); } al_destroy_display(display); al_destroy_event_queue(event_queue); return 0;}
Este código crea una ventana, registra eventos de teclado y dibuja círculos aleatorios, actualizando la pantalla con al_flip_display()
. La gestión de eventos permite una mayor interactividad y control sobre la aplicación.
Manejo de imágenes en Allegro 5
Similar a Allegro 4, Allegro 5 requiere add-ons para el manejo de imágenes. Una vez que se hayan inicializado los add-ons necesarios (normalmente, se incluye el add-on para imágenes en la instalación estándar de Allegro 5), podemos cargar e implementar imágenes utilizando funciones como al_load_bitmap
y al_draw_bitmap
.
// ... (código de inicialización de Allegro 5) ...ALLEGRO_BITMAP imagen = al_load_bitmap("imagen.png");if (imagen != NULL) { al_draw_bitmap(imagen, 100, 100, 0); // ... resto del código ...}
Consultas habituales y resolución de problemas
Algunas consultas habituales al trabajar solo con la pantalla gráfica en Allegro son:
- Problemas de inicialización: Asegúrate de que Allegro esté correctamente instalado y configurado, y de que las bibliotecas necesarias estén enlazadas.
- Errores de visualización: Verifica la configuración del modo gráfico (resolución, color depth), la inicialización de los add-ons y la correcta gestión de eventos (en Allegro 5).
- Rendimiento: Para obtener un rendimiento óptimo, utiliza add-ons de aceleración por hardware (OpenGL/Direct3D) en Allegro 5 y considera optimizar el código para minimizar los cálculos en cada fotograma.
- Problemas con la carga de imágenes: Verifica que la ruta a la imagen sea correcta y que el formato de la imagen sea compatible con la biblioteca.
Conclusión
Tanto Allegro 4 como Allegro 5 son potentes herramientas para la programación gráfica de videojuegos en C++. Si bien Allegro 5 ofrece un enfoque más moderno y flexible con mayor control y opciones de optimización, Allegro 4 puede ser una excelente opción para principiantes debido a su simplicidad. La elección dependerá de tus necesidades y preferencias. Recuerda que, para el desarrollo gráfico, la correcta configuración del modo gráfico y la inicialización de las bibliotecas necesarias son cruciales para evitar errores y conseguir un buen rendimiento.