Forum - C/C++
- Libreria ALLEGRO muovere il player?
tola22 (Normal User)
Newbie
Messaggi: 1
Iscritto: 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
#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
nessuno (Normal User)
Guru^2
Messaggi: 6378
Iscritto: 03/01/2010
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à.
RiccardoG97 (Member )
Pro
Messaggi: 133
Iscritto: 03/01/2012
Dai un'occhiata a questo codice, che ho scritto tempo fa.
Codice sorgente - presumibilmente C/C++
// 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