elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Allegro no actualiza correctamente la pantalla
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Allegro no actualiza correctamente la pantalla  (Leído 2,568 veces)
eleon

Desconectado Desconectado

Mensajes: 99


Ver Perfil
Allegro no actualiza correctamente la pantalla
« en: 14 Junio 2012, 10:36 am »

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:


Código
  1. //Variables globales
  2. int A = 15;
  3. int B = 180;
  4. int C = 598;
  5. int D = 180;
  6.  
  7. void actualizar_pantalla (BITMAP *buffer)
  8. {
  9.    //Limpio el buffer
  10.    clear_bitmap (buffer);
  11.  
  12.    //Guardo en el buffer todo lo que quiero imprimir por pantalla
  13.    line (buffer, 10, 10, 610, 10, palette_color[8]);
  14.    line (buffer, 10, 10, 10, 410, palette_color[8]);
  15.    line (buffer, 610, 10, 610, 410, palette_color[8]);
  16.    line (buffer, 10, 410, 610, 410, palette_color[8]);
  17.    line (buffer, 310, 10, 310, 410, palette_color[15);
  18.  
  19.    rectfill (buffer, A, B, A + 7, B + 50, palette_color[1]);
  20.    rectfill (buffer, C, D, C + 7, D + 50, palette_color[4]);
  21.  
  22.    circlefill (buffer, 310, 210, 4, palette_color[15]);
  23.  
  24.  
  25.    //Imprimimos el buffer
  26.    clear_bitmap (screen); //Primero limpio la pantalla
  27.    blit (buffer, screen, 0,0,0,0,SCREEN_W,SCREEN_H); //Luego imprimo el buffer
  28.  
  29. }
  30.  
  31. int main()
  32. {
  33.  
  34. ...
  35.  
  36. BITMAP *buffer = create_bitmap (SCREEN_W, SCREEN_H); /*Reservo memoria para un bitmap y le asigno el tamaño de la pantalla*/
  37. while (!key[KEY_ESC]) /*Mientras no se presione ESC hago sondeo y compruebo si se ha presionado la tecla A*/
  38.    {
  39.        if (key[KEY_A])
  40.        {
  41.            pala_izq_posY -= 1;
  42.            actualizar_pantalla(buffer);
  43.        }
  44.    }
  45.  
  46. ...
  47. exit_allegro();
  48. return 0;
  49. } 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?.


« Última modificación: 14 Junio 2012, 10:52 am por eleon » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
allegro en windows
Programación C/C++
Flynker 7 2,924 Último mensaje 8 Octubre 2010, 15:44 pm
por xassiz~
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines