Ejemplo del Editor Paint Koday |
#include <allegro.h> #define ANCHO 640 #define ALTO 480 int soltado = 1; int accion = 4; BITMAP *buffer; BITMAP *dibujo; BITMAP *botones;
Paso a paso
En la primera linea incluimos la librería con la cual realizaremos el proyecto.
En las lineas 2 y 3, definimos dos constantes ANCHO y ALTO que se utilizan para la resolución de la ventana.
En las lineas 5 al 9, se declaran las variables globales de nuestro ejemplo.
- Soltado : indica si no esta pulsado el botón del ratón.
- accion: indica el numero de la acción que esta activa.
- buffer: imagen que almacena todo para mostrarse por pantalla.
- dibujo: contiene la imagen que se crea en el editor.
- botones: la imagen que contiene los botones del editor.
int main() { allegro_init(); install_keyboard(); install_mouse(); set_color_depth(32); set_gfx_mode(GFX_AUTODETECT_WINDOWED, ANCHO, ALTO, 0, 0); buffer = create_bitmap(ANCHO, ALTO); dibujo = create_bitmap(ANCHO, ALTO); botones = load_bmp("bton.bmp",NULL); clear_to_color(buffer, 0xFFFFFF); clear_to_color(dibujo, 0xFFFFFF); while( !key[KEY_ESC] ){ blit( dibujo, buffer, 0,0,0,0,ANCHO, ALTO); Pinta_botones(); //pulsa boton izquierdo if(mouse_b&1){ Boton_izquierdo(); }else{ soltado =1; } Pinta_cursor(); blit(buffer, screen, 0, 0, 0, 0, ANCHO, ALTO); } destroy_bitmap(botones); destroy_bitmap(dibujo); destroy_bitmap(buffer); return 0; } END_OF_MAIN();
Funcion Principal paso a paso
allegro_init(); install_keyboard(); install_mouse();Inicializa el entorno del allegro, e instala el teclado y el ratón.
set_color_depth(32); set_gfx_mode(GFX_AUTODETECT_WINDOWED, ANCHO, ALTO, 0, 0);Se definen las dimensiones de nuestra ventana segun las constantes ancho y alto.
buffer = create_bitmap(ANCHO, ALTO); dibujo = create_bitmap(ANCHO, ALTO);Se inicializa las imagenes.
botones = load_bmp("bton.bmp",NULL);Se carga la imagen de los botones
clear_to_color(buffer, 0xFFFFFF); clear_to_color(dibujo, 0xFFFFFF);Se rellenan las imágenes buffer y dibujo con el color blanco.
while( !key[KEY_ESC] ){ blit( dibujo, buffer, 0,0,0,0,ANCHO, ALTO); Pinta_botones(); //pulsa boton izquierdo if(mouse_b&1){ Boton_izquierdo(); }else{ soltado =1; } Pinta_cursor(); blit(buffer, screen, 0, 0, 0, 0, ANCHO, ALTO); }
El bucle principal que se repite mientras no se pulse la tecla ESC, dibuja el dibujo y los botones sobre el buffer. Si se pulsa el botón izquierdo del ratón se llama a la función boton_izquierdo(). Pinta el cursor sobre el buffer. Y finalmente se vuelca el contenido del buffer sobre la pantalla para mostrarlo.
destroy_bitmap(botones); destroy_bitmap(dibujo); destroy_bitmap(buffer);Antes de acabar se debe de liberar la memoria ocupada por las imágenes.
Funciones
Estas funciones se deben de declarar por encima de la función principal para un correcto funcionamiento.void Boton_izquierdo(){ if ( Sobre_boton() ){ cambiaccion(); }else{ realizaccion(); } };
Esta función comprueba si cuando se ha pulsado el botón izquierdo, el cursor esta sobre los botones. La función debe declararse por debajo de las tres funciones que se utilizan dentro de ella, que son Sobre_boton(), cambiaccion() y realizaccion().
void cambiaccion(){}; void realizaccion(){};Se crean las siguientes funciones, inicialmente vacías para poder compilar el proyecto.
void Pinta_cursor(){ circle( buffer, mouse_x, mouse_y, 2, 0x000000 ); putpixel( buffer, mouse_x, mouse_y, 0x000000); };Esta función pinta el cursor.
void Pinta_botones(){ blit( botones, buffer, 0,0, 0,0,64, 64); };Esta funcion muestra los botones.
bool Sobre_boton(){ return ( mouse_x >0 && mouse_x < 64 && mouse_y >0 && mouse_y < 64 ); };
Esta función comprueba si el cursor esta sobre los botones, que en este caso se encuentran en la posición de arriba a la izquierda.
Y aquí acaba la primera parte del editor. La semana que viene pondré la segunda parte con la imagen de los botones y las primeras funciones básicas del editor.
Un buen tutorial!!!!!
ResponderEliminarsi me gusta
ResponderEliminarpero la gran pregunta de un millon de pesos funcionara ?
si se siguen todos los pasos y no hay ningun error al copiar, debe funcionar
Eliminarque buen tutorial gracias (Y)
ResponderEliminarMuy bueno por cierto me gusto el nuevo banner de tu foro
ResponderEliminarMuy Bueno el tutorial, pero por que al compilar el programa se bloquea
ResponderEliminarque version de allegro usas?
ResponderEliminarla version 4
EliminarMuy buen tutorial y muy bien explicado.. cosa que se echa en falta en otros muchos... aunque me da error en donde el bool de Sobre_boton... probe a cambiar el bool por void por si era un error.. y luego me da error en la linea siguiente, en el return... me temo que me pase algo en la configuracion del dev, verdad?
ResponderEliminarEl 5 !! no se como, pero logre arrancar el allegro (aunque en codeblocks, no me mateis)...eso si, con el raton tengo problemas, pero seguire peleando que algo hare :S Y me reitero... muchas gracias por el tuto
ResponderEliminarLo arrancaste en dev C++?, A mi no me cae en nada el alegro ]:
EliminarEn su momento fue en Codebocks... ahora no toco mucho (nada vamos) el allegro... me pase a C# y Unity, y justo esta semana para quitar oxido con C++ me dio por mirar SFML a ver si era mejor que Allegro.. creo que Allegro es mas sencillo quizas, pero si que da guerra tambien!
Eliminar