Oppure

Loading
12/02/12 19:33
tola22
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:
#include <allegro.h>

int main() 
{	
	allegro_init();
	install_keyboard();
	
	set_color_depth(32);
	set_gfx_mode(GFX_AUTODETECT_WINDOWED, 1024, 768, 0, 0);
	
	BITMAP *my_pic = NULL;
    my_pic = load_bitmap("picture.bmp", NULL); // Load our picture
    masked_blit(my_pic, screen, 0,0,0,0,1024,768);//Draw the whole bitmap to the screen at (0,0)
    clear_keybuf();
    clear_bitmap(screen); 
draw_sprite(screen, my_pic, 0,0); //Draw the bitmap at 0,0. 

    BITMAP *my_pic2 = NULL;
    my_pic2 = load_bitmap("versione.bmp", NULL); // Load our picture
    masked_blit(my_pic2, screen, 880,710,0,0,1024,768);//Draw the whole bitmap to the screen at (0,0)

draw_sprite(screen, my_pic2, 880,710); //Draw the bitmap at 0,0. 

BITMAP *my_pic3 = load_bitmap ("player.bmp",NULL) ;

    int x = 0;
    int y = 0;
    
    while (! key [KEY_ESC])
    {    
          if (key [KEY_LEFT]) x -= 5 ;
          if (key [KEY_RIGHT]) x += 5 ;
          if (key [KEY_UP]) y -= 5 ;
          if (key [KEY_DOWN]) y += 5 ;
          draw_sprite(screen, my_pic3, 550,440);
          blit (my_pic3, screen, 550, 440, 0, 0, my_pic3->w, my_pic3->h) ;
    } 
    destroy_bitmap (my_pic);
    destroy_bitmap (my_pic2);
    destroy_bitmap (my_pic3);
	return 0;
}
END_OF_MAIN ();
grazie in anticipo a tutti :yup:
aaa
12/02/12 19:50
nessuno
Scusa ... ma che ruolo hanno x e y nel ciclo per il ridisegno?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
14/02/12 15:21
RiccardoG97
Dai un'occhiata a questo codice, che ho scritto tempo fa.
// SpaceShooter.cpp

// In ogni programma che utilizza la libreria allegro, essa va inclusa tramite questo comando:
#include "allegro.h"

// Questa variabile serve per visualizzare il contenuto su schermo
BITMAP *buf;

// Crea anche la variabile dello sprite
BITMAP *sprite;

// Variabile colori che indica al pc che profondità di colore voglio usare sulle immagini visualizzate

PALETTE colori;

// Variabili intere che indicheranno la posizione dello sprite sullo schermo

int x, y;

/* A questo punto inseriamo la routine doppioBuffering() per aggiornare
   ogni volta che vogliamo lo schermo. Se non si usasse la tecnica del
   doppioBuffering lo schermo verrebbe aggiornato così spesso da produrre
   un fastidioso effetto di sfarfallio */
   
void doppioBuffering()
{
    // Questo comando serve per sincronizzare l'aggiornamento dello schermo
    vsync();
    
    /* Il comando blit prende il contenuto disegnato da buffer (buf) e lo visualizza
       sullo schermo (screen) partendo da un angolo (x1=0, y1=0) fino all'angolo
       opposto dello schermo (x2=640, y2=400) */
       
    blit ( buf, screen, 0, 0, 0, 0, 640, 400 );
    
    /* Ogni volta che il contenuto di buffer è visualizzato sullo schermo è
       necessario cancellarne il contenuto per evitare l'effetto di 
       sovrapposizione delle schermate. */
       
    clear ( buf );
}

// Creiamo la procedura per il disegno di uno sprite sul buffer dello schermo

void player()
{
    // Questo comando permette di visualizzare nel buffer l'immagine contenuta nella variabile sprite e
    // di posizionarla su schermo in precise coordinate
    
    draw_sprite ( buf, sprite, x, y );
}

// Creazione della procedura per riconoscere i tasti premuti dall'utente
void movimentoTasti()
{
    if ( key[KEY_LEFT] && x >= 0 )
        x -= 2;
    if ( key[KEY_RIGHT] && x <= 590 )
        x += 2;
    if ( key[KEY_UP] && y >= 0 )
        y -= 2;
    if ( key[KEY_DOWN] && y <= 360 )
        y += 2; 
}        
    
int main ( void )
{

    // Questo comando attiva tutte le funzioni di Allegro

    allegro_init();
    
    // Con quest'altro indichiamo che nel nostro programma verra usata la tastiera
    
    install_keyboard();
    
    /* Indica il numero di bit della palette. E' meglio indicare sempre 32 bit */
    
    set_color_depth ( 32 );
    
    set_palette ( colori );
    
    /* con questa funzione indichiamo al computer la modalità grafica che
       intendiamo usare e la risoluzione grafica. La setteremo su AUTODETECT, in
       questo modo sara il pc a scegliere quella migliore. Ricorda che pero
       ne esistono molte altre!! */
       
    set_gfx_mode ( GFX_AUTODETECT, 640, 400, 0, 0 );
    
     // Determina la dimensione del bitmap del buffer (buf) in una matrice di pixel di X=320 / Y=200
     
      buf = create_bitmap ( 640, 400 );
      
      // Pulisce il buffer che è appena stato creato
      
      clear ( buf );
      
      /* Carica l'immagine bitmap del player chiamata "player.bmp" che si deve trovare 
         nella stessa directory del file eseguibile! */
      
      sprite = load_bmp ( "player.bmp", colori );
      
      // Modificando le variabili viene modificata la posizione dello sprite
      
      x = 10;
      y= 30;
      
      // Con il ciclo si creerà un ciclo infinito che si interromperà quando si premerà ESC
      
      while ( !key[KEY_ESC] )
      {
          doppioBuffering();
          
          player();
          
          movimentoTasti();
      }
      
      // Quando il ciclo termina bisogna distruggere buf per evitare problemi di memoria
      
      destroy_bitmap ( buf );
      
      // Distruggiamo anche lo sprite
      
      destroy_bitmap ( sprite );
}

// END_OF_MAIN() è un comando di allegro per far funzionare la chiusura dei programmi sotto Windows senza problemi

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:
aaa