Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Allegro.h -- Muovere più bitmap
Forum - C/C++ - Allegro.h -- Muovere più bitmap

Avatar
Riki94 (Normal User)
Pro


Messaggi: 93
Iscritto: 30/07/2009

Segnala al moderatore
Postato alle 15:09
Martedì, 02/11/2010
Ciao a tutti... sono agli inizi con allegro e sono riuscito a far muovere tramite i tasti wasd una bitmap...
adesso vorrei fare la stessa cosa su una seconda bitmap con i tasti freccia. Il codice funziona, le due bitmap si muovono, solamente che compaiono sullo schermo "a linee", come se il computer non riuscisse a processare gli spostamenti delle immagini insieme... purtroppo in una immagine non si vede questo fenomeno ma appare normale... se lo ritenete utile posso linkarvi un video per dimostrarvi cosa succede.. intanto questo è il codice...

Codice sorgente - presumibilmente C

  1. #include <allegro.h>
  2.  
  3.  
  4. void init();
  5. void deinit();
  6.  
  7. int main() {
  8.         init();
  9.     BITMAP *im1 = NULL;
  10.     BITMAP *buffer = NULL;
  11.     BITMAP *buffer2 = NULL;
  12.     BITMAP *im2 = NULL;
  13.     double im1_x=0,im1_y=0;
  14.     double im2_x=0,im2_y=0;
  15.     buffer = create_bitmap(320,200);
  16.     buffer2 = create_bitmap(320,200);
  17.     im1 = load_bitmap("bit1.bmp",NULL);
  18.     im2 = load_bitmap("bit2.bmp",NULL);
  19.     while (!key[KEY_ESC])
  20.     {
  21.         if(im1==NULL)
  22.         {
  23.             allegro_message("Errore. File non trovato.");
  24.             return 0;
  25.         }
  26.         if(key[KEY_A])
  27.         {
  28.                 im1_x = im1_x - 0.1;
  29.                 if(im1_x <=0) im1_x=0;
  30.         }
  31.         if(key[KEY_D])
  32.         {
  33.                 im1_x = im1_x + 0.1;
  34.                 if(im1_x >=270) im1_x=270;
  35.         }
  36.         if(key[KEY_W])
  37.         {
  38.                 im1_y = im1_y - 0.1;
  39.                 if(im1_y <=0) im1_y=0;
  40.         }
  41.         if(key[KEY_S])
  42.         {
  43.                 im1_y = im1_y + 0.1;
  44.                 if(im1_y >=150) im1_y=150;
  45.         }
  46.         if(im2==NULL)
  47.         {
  48.             allegro_message("Errore. File non trovato.");
  49.             return 0;
  50.         }
  51.         if(key[KEY_LEFT])
  52.         {
  53.                 im2_x = im2_x - 0.1;
  54.                 if(im2_x <=0) im2_x=0;
  55.         }
  56.         if(key[KEY_RIGHT])
  57.         {
  58.                 im2_x = im2_x + 0.1;
  59.                 if(im2_x >=270) im2_x=270;
  60.         }
  61.         if(key[KEY_UP])
  62.         {
  63.                 im2_y = im2_y - 0.1;
  64.                 if(im2_y <=0) im2_y=0;
  65.         }
  66.         if(key[KEY_DOWN])
  67.         {
  68.                 im2_y = im2_y + 0.1;
  69.                 if(im2_y >=150) im2_y=150;
  70.         }
  71.        
  72.         draw_sprite(buffer2,im2,im2_x,im2_y);
  73.         blit(buffer2,screen,0,0,0,0,320,200);
  74.         draw_sprite(buffer,im1,im1_x,im1_y);
  75.         blit(buffer,screen,0,0,0,0,320,200);
  76.         clear_bitmap(buffer2);
  77.         clear_bitmap(buffer);
  78.        
  79.        
  80.     }
  81.     destroy_bitmap(im1);        
  82.     destroy_bitmap(im2);
  83.         destroy_bitmap(buffer);
  84.         destroy_bitmap(buffer2);
  85.        
  86.  
  87.         deinit();
  88.         return 0;
  89. }
  90. END_OF_MAIN()
  91.  
  92. void init() {
  93.         int depth, res;
  94.         allegro_init();
  95.         depth = desktop_color_depth();
  96.         if (depth == 0) depth = 32;
  97.         set_color_depth(depth);
  98.         res = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 320,200, 0, 0);
  99.         if (res != 0) {
  100.                 allegro_message(allegro_error);
  101.                 exit(-1);
  102.         }
  103.  
  104.         install_timer();
  105.         install_keyboard();
  106.         install_mouse();
  107.         /* add other initializations here */
  108. }
  109.  
  110. void deinit() {
  111.         clear_keybuf();
  112.        
  113. }



grazie a chiunque risponderà... :-?:-?:-?

PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
0
Down
V
Segnala al moderatore
Postato alle 15:17
Martedì, 02/11/2010
devi creare una procedura di doppiobuffering che serve a "ripulire" lo schermo.
Ti linko una guida molto buona che lo spiega : http://www.bertinettobartolomeodavide.it/programmazione/AL ... :k: devi schiacciare su download xD!

PM
Avatar
Riki94 (Normal User)
Pro


Messaggi: 93
Iscritto: 30/07/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 15:33
Martedì, 02/11/2010
grazie mille per la risposta e per lo splendido tutorial... :)

PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
0
Down
V
Segnala al moderatore
Postato alle 16:08
Martedì, 02/11/2010
di niente!:k:

PM