Buenas, tengo el siguiente problema:
Imprimo perfectamente unas líneas y unos rectángulos en pantalla ¿ok?, el caso es que al presionar una tecla (la A por ejemplo) quiero borrar la pantalla e imprimir de nuevo otras figuras (casi las mismas). El problema es que consigo este efecto tras pulsar la tecla "A" 283974823 veces y además una única vez, os dejo el código:
//Variables globales
int A = 15;
int B = 180;
int C = 598;
int D = 180;
void actualizar_pantalla (BITMAP *buffer)
{
//Limpio el buffer
clear_bitmap (buffer);
//Guardo en el buffer todo lo que quiero imprimir por pantalla
line (buffer, 10, 10, 610, 10, palette_color[8]);
line (buffer, 10, 10, 10, 410, palette_color[8]);
line (buffer, 610, 10, 610, 410, palette_color[8]);
line (buffer, 10, 410, 610, 410, palette_color[8]);
line (buffer, 310, 10, 310, 410, palette_color[15);
rectfill (buffer, A, B, A + 7, B + 50, palette_color[1]);
rectfill (buffer, C, D, C + 7, D + 50, palette_color[4]);
circlefill (buffer, 310, 210, 4, palette_color[15]);
//Imprimimos el buffer
clear_bitmap (screen); //Primero limpio la pantalla
blit (buffer, screen, 0,0,0,0,SCREEN_W,SCREEN_H); //Luego imprimo el buffer
}
int main()
{
...
BITMAP *buffer = create_bitmap (SCREEN_W, SCREEN_H); /*Reservo memoria para un bitmap y le asigno el tamaño de la pantalla*/
while (!key[KEY_ESC]) /*Mientras no se presione ESC hago sondeo y compruebo si se ha presionado la tecla A*/
{
if (key[KEY_A])
{
pala_izq_posY -= 1;
actualizar_pantalla(buffer);
}
}
...
exit_allegro();
return 0;
} END_OF_MAIN();
Como podéis observar he considerado la opción de que se ralentice por excesivas llamadas al sistema para imprimir en pantalla, por eso uso un buffer y lo vuelco todo de golpe.
Gracias por adelantado. Saludos.
EDITO:Vale, me he dado cuenta de que si presiono la tecla A no se produce movimiento hasta que no aprieto con el ratón en la ventana de la aplicación, ¿esto por qué es?, ¿es posible que se deseleccione la ventana automáticamente?.