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