Allegro no actualiza correctamente la pantalla

Iniciado por eleon, 14 Junio 2012, 10:36 AM

0 Miembros y 1 Visitante están viendo este tema.

eleon

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?.