Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Libreria ALLEGRO muovere il player?
Forum - C/C++ - Libreria ALLEGRO muovere il player?

Avatar
tola22 (Normal User)
Newbie


Messaggi: 1
Iscritto: 12/02/2012

Segnala al moderatore
Postato alle 20:33
Domenica, 12/02/2012
salve a tutti ho iniziato ad usare la libreria ALLEGRO ma mi sono bloccato al punto che alla pressione dei tasti direzionali il player anziké fare la mossa che dovrebbe sta li immobile ;) qualcuno mi sa aiutare? ora vi metto il codice che o scritto:
Codice sorgente - presumibilmente Delphi

  1. #include <allegro.h>
  2.  
  3. int main()
  4. {      
  5.         allegro_init();
  6.         install_keyboard();
  7.        
  8.         set_color_depth(32);
  9.         set_gfx_mode(GFX_AUTODETECT_WINDOWED, 1024, 768, 0, 0);
  10.        
  11.         BITMAP *my_pic = NULL;
  12.     my_pic = load_bitmap("picture.bmp", NULL); // Load our picture
  13.     masked_blit(my_pic, screen, 0,0,0,0,1024,768);//Draw the whole bitmap to the screen at (0,0)
  14.     clear_keybuf();
  15.     clear_bitmap(screen);
  16. draw_sprite(screen, my_pic, 0,0); //Draw the bitmap at 0,0.
  17.  
  18.     BITMAP *my_pic2 = NULL;
  19.     my_pic2 = load_bitmap("versione.bmp", NULL); // Load our picture
  20.     masked_blit(my_pic2, screen, 880,710,0,0,1024,768);//Draw the whole bitmap to the screen at (0,0)
  21.  
  22. draw_sprite(screen, my_pic2, 880,710); //Draw the bitmap at 0,0.
  23.  
  24. BITMAP *my_pic3 = load_bitmap ("player.bmp",NULL) ;
  25.  
  26.     int x = 0;
  27.     int y = 0;
  28.    
  29.     while (! key [KEY_ESC])
  30.     {    
  31.           if (key [KEY_LEFT]) x -= 5 ;
  32.           if (key [KEY_RIGHT]) x += 5 ;
  33.           if (key [KEY_UP]) y -= 5 ;
  34.           if (key [KEY_DOWN]) y += 5 ;
  35.           draw_sprite(screen, my_pic3, 550,440);
  36.           blit (my_pic3, screen, 550, 440, 0, 0, my_pic3->w, my_pic3->h) ;
  37.     }
  38.     destroy_bitmap (my_pic);
  39.     destroy_bitmap (my_pic2);
  40.     destroy_bitmap (my_pic3);
  41.         return 0;
  42. }
  43. END_OF_MAIN ();

grazie in anticipo a tutti :yup:

PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 20:50
Domenica, 12/02/2012
Scusa ... ma che ruolo hanno x e y nel ciclo per il ridisegno?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM
Avatar
RiccardoG97 (Member)
Pro


Messaggi: 133
Iscritto: 03/01/2012

Up
0
Down
V
Segnala al moderatore
Postato alle 16:21
Martedì, 14/02/2012
Dai un'occhiata a questo codice, che ho scritto tempo fa.
Codice sorgente - presumibilmente C/C++

  1. // SpaceShooter.cpp
  2.  
  3. // In ogni programma che utilizza la libreria allegro, essa va inclusa tramite questo comando:
  4. #include "allegro.h"
  5.  
  6. // Questa variabile serve per visualizzare il contenuto su schermo
  7. BITMAP *buf;
  8.  
  9. // Crea anche la variabile dello sprite
  10. BITMAP *sprite;
  11.  
  12. // Variabile colori che indica al pc che profondità di colore voglio usare sulle immagini visualizzate
  13.  
  14. PALETTE colori;
  15.  
  16. // Variabili intere che indicheranno la posizione dello sprite sullo schermo
  17.  
  18. int x, y;
  19.  
  20. /* A questo punto inseriamo la routine doppioBuffering() per aggiornare
  21.    ogni volta che vogliamo lo schermo. Se non si usasse la tecnica del
  22.    doppioBuffering lo schermo verrebbe aggiornato così spesso da produrre
  23.    un fastidioso effetto di sfarfallio */
  24.    
  25. void doppioBuffering()
  26. {
  27.     // Questo comando serve per sincronizzare l'aggiornamento dello schermo
  28.     vsync();
  29.    
  30.     /* Il comando blit prende il contenuto disegnato da buffer (buf) e lo visualizza
  31.        sullo schermo (screen) partendo da un angolo (x1=0, y1=0) fino all'angolo
  32.        opposto dello schermo (x2=640, y2=400) */
  33.        
  34.     blit ( buf, screen, 0, 0, 0, 0, 640, 400 );
  35.    
  36.     /* Ogni volta che il contenuto di buffer è visualizzato sullo schermo è
  37.        necessario cancellarne il contenuto per evitare l'effetto di
  38.        sovrapposizione delle schermate. */
  39.        
  40.     clear ( buf );
  41. }
  42.  
  43. // Creiamo la procedura per il disegno di uno sprite sul buffer dello schermo
  44.  
  45. void player()
  46. {
  47.     // Questo comando permette di visualizzare nel buffer l'immagine contenuta nella variabile sprite e
  48.     // di posizionarla su schermo in precise coordinate
  49.    
  50.     draw_sprite ( buf, sprite, x, y );
  51. }
  52.  
  53. // Creazione della procedura per riconoscere i tasti premuti dall'utente
  54. void movimentoTasti()
  55. {
  56.     if ( key[KEY_LEFT] && x >= 0 )
  57.         x -= 2;
  58.     if ( key[KEY_RIGHT] && x <= 590 )
  59.         x += 2;
  60.     if ( key[KEY_UP] && y >= 0 )
  61.         y -= 2;
  62.     if ( key[KEY_DOWN] && y <= 360 )
  63.         y += 2;
  64. }        
  65.    
  66. int main ( void )
  67. {
  68.  
  69.     // Questo comando attiva tutte le funzioni di Allegro
  70.  
  71.     allegro_init();
  72.    
  73.     // Con quest'altro indichiamo che nel nostro programma verra usata la tastiera
  74.    
  75.     install_keyboard();
  76.    
  77.     /* Indica il numero di bit della palette. E' meglio indicare sempre 32 bit */
  78.    
  79.     set_color_depth ( 32 );
  80.    
  81.     set_palette ( colori );
  82.    
  83.     /* con questa funzione indichiamo al computer la modalità grafica che
  84.        intendiamo usare e la risoluzione grafica. La setteremo su AUTODETECT, in
  85.        questo modo sara il pc a scegliere quella migliore. Ricorda che pero
  86.        ne esistono molte altre!! */
  87.        
  88.     set_gfx_mode ( GFX_AUTODETECT, 640, 400, 0, 0 );
  89.    
  90.      // Determina la dimensione del bitmap del buffer (buf) in una matrice di pixel di X=320 / Y=200
  91.      
  92.       buf = create_bitmap ( 640, 400 );
  93.      
  94.       // Pulisce il buffer che è appena stato creato
  95.      
  96.       clear ( buf );
  97.      
  98.       /* Carica l'immagine bitmap del player chiamata "player.bmp" che si deve trovare
  99.          nella stessa directory del file eseguibile! */
  100.      
  101.       sprite = load_bmp ( "player.bmp", colori );
  102.      
  103.       // Modificando le variabili viene modificata la posizione dello sprite
  104.      
  105.       x = 10;
  106.       y= 30;
  107.      
  108.       // Con il ciclo si creerà un ciclo infinito che si interromperà quando si premerà ESC
  109.      
  110.       while ( !key[KEY_ESC] )
  111.       {
  112.           doppioBuffering();
  113.          
  114.           player();
  115.          
  116.           movimentoTasti();
  117.       }
  118.      
  119.       // Quando il ciclo termina bisogna distruggere buf per evitare problemi di memoria
  120.      
  121.       destroy_bitmap ( buf );
  122.      
  123.       // Distruggiamo anche lo sprite
  124.      
  125.       destroy_bitmap ( sprite );
  126. }
  127.  
  128. // END_OF_MAIN() è un comando di allegro per far funzionare la chiusura dei programmi sotto Windows senza problemi
  129.  
  130. END_OF_MAIN();



Funziona l'ho provato. In pratica è una navicella che si muove. Spero di essere stato d'aiuto!
Ciao e buona fortuna :k:


"Il sangue ha il sapore del ferro"
PM