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++ - Far saltare lo sprite con allegro.h!!
Forum - C/C++ - Far saltare lo sprite con allegro.h!! - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
russoandrea96 (Normal User)
Newbie


Messaggi: 19
Iscritto: 20/08/2010

Segnala al moderatore
Postato alle 23:55
Sabato, 21/08/2010
Testo quotato

Postato originariamente da giuseppe93:

si vede che non hai mai letto uno guida riguardo ALLEGRO! perchè la prima cosa che ti insegnano è evitare questo problema! in poche parole devi dichiarare un altro BITMAP che funziona da buffer cioè la zona dello schermo dove disegnerai lo sprite verrà "preparata" per essere riempita con un'immagine. in termini di codice devi fare questo;
Codice sorgente - presumibilmente C/C++

  1. BITMAP *buffer=create_bitmap(x,y);
  2. clear(buffer);
  3. void doppiobuffering(){
  4. vsync();
  5. blit(buffer, screen,0,0,0,0,x,y);
  6. clear(buffer);}


dove x e y sono la larghezza e lunghezza della tua finestra. Devi chiamare questa funzione prima di eseguire ogni draw_sprite(). In ogni caso ti consiglio caldamente di imparare l'uso di blit() perchè come te l'ho scritto io non è il migliore dei modi.



il doppiobuffering XD scusa non ci avevo proprio pensato!Comunque io sto seguendo la miglior guida di allegro in italiano quella di bertinettobartolomeodavide...
Lo so che ti sto rompendo :D ma ho un ultimo problema...QUANDO SALTA SI VEDE A SCATTI!
ecco il codice del salto completo e un po migliorato...
Codice sorgente - presumibilmente C/C++

  1. if (key[KEY_SPACE]){
  2.       for(a=0;a<10;a++){
  3.         y=y-5;
  4.         if(key[KEY_LEFT])x=x-3;
  5.         if(key[KEY_RIGHT])x=x+3;
  6.         draw_sprite(screen,sprite,x,y);
  7.         doppiobuffering();
  8.         blit(background, buffer, 0, 0, 0, 0, 640, 480);
  9.       }
  10.      
  11.       for(b=0;b<10;b++){
  12.         y=y+5;
  13.         if(key[KEY_LEFT])x=x-3;
  14.         if(key[KEY_RIGHT])x=x+3;
  15.         draw_sprite(screen,sprite,x,y);
  16.         doppiobuffering();
  17.         blit(background, buffer, 0, 0, 0, 0, 640, 480);
  18.       }
  19.     }


come risolgo il problema?
si vede a scatti non perchè è lento ma lo sfondo e lo sprite si accendono e spentono quando salto...

Ultima modifica effettuata da russoandrea96 il 22/08/2010 alle 0:20
PM Quote
Avatar
russoandrea96 (Normal User)
Newbie


Messaggi: 19
Iscritto: 20/08/2010

Segnala al moderatore
Postato alle 21:24
Domenica, 22/08/2010
Risolto,per chi potesse servire vi posto il codice completo :
Codice sorgente - presumibilmente C/C++

  1. if (key[KEY_UP]){
  2.       for(a=0;a<10;a++){
  3.         y=y-5;
  4.         if(key[KEY_LEFT])x=x-3;
  5.         if(key[KEY_RIGHT])x=x+3;
  6.         blit(background, buffer, 0, 0, 0, 0, 640, 480);
  7.         doppiobuffering();
  8.         draw_sprite(screen,sprite,x,y);
  9.         blit(background, buffer, 0, 0, 0, 0, 640, 480);
  10.       }
  11.      
  12.       for(b=0;b<10;b++){
  13.         y=y+5;
  14.         if(key[KEY_LEFT])x=x-3;
  15.         if(key[KEY_RIGHT])x=x+3;
  16.         doppiobuffering();
  17.         draw_sprite(screen,sprite,x,y);
  18.         blit(background, buffer, 0, 0, 0, 0, 640, 480);
  19.       }
  20.     }


PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo