PDA

Visualizza la versione completa : [C++] Uso di Allegro.h


benny92_wliga
26-01-2009, 17:44
Ciao a tutti..io ho copiato sul mio editor questo programma:
/* cominciamo subito con includere la libreria allegro.h in modo che possiamo
usare tutti i comandi necessari per realizzare il videogame */
#include "allegro.h"
/* E' il momento di dichiarare qualche variabile. In questo caso quella che serve per
visualizzare il contenuto su schermo per realizzare la routine di doppiobuffering
ovvero (*buf) che nel listato diventerà semplicemente (buf). */
BITMAP *buf;
/* a questo punto è il momento di inserire la routine di doppiobuffering per
l'aggiornamento dello schermo */
/* con il comando void 'doppiobuffering() {...}' iniziamo la procedura di aggionamento
dello schermo che potremmo richiamare in qualunque momento con il comando
'doppiobufferng();'
Se non si usasse la tecnica del doppiobuffering ma si visualizzassero direttamente
gli oggetti del gioco su schermo si otterrebbe un fastidioso effetto di sfarfallio
dovuto al continuo ridisegnamento dello schermo. Con il doppiobuffering invece gli oggetti
vengono prima disegnati con calma sul buffer e poi, a cose fatte, vengono aggiunti
sullo schermo.
*/
void doppiobuffering()
{
/* il comando 'vsync();' serve per sincronizzare l'aggiornamento dello schermo */
vsync();
/* il comando 'blit' prende il contenuto che è stato disegnato nel buffer (buf) e lo visualizza su schermo (screen)
partendo da un certo angolo (x1=0,y1=0) fino all'angolo opposto dello schermo (x2=320, y2=200) */
blit(buf, screen, 0, 0, 0, 0, 320, 200);
/* ogni volta che il contenuto del buffer è stato visualizzato su schermo e necessario
cancellare il contenuto del buffer stesso per permettere l'inserimento di nuove scene
10
evitando cosi un fastidioso effetto di sovrapposizione delle schermate. Questo risultato
si ottiene con il comando 'clear(buf);' */
clear(buf);
}
/* con il comando 'int main() {...}' inizia la procedura principale del nostro
videogame in cui saranno raccolte tutte le altre procedure */
int main()
{
/* il comando 'allegro_init(); indica che è usata la libreria allegro.h e che
devono essere attivate tutte le sue funzioni */
allegro_init();
/* con 'install_keyboard();' indichiamo che nel nostro programma sarà utilizzata
la tastiera. In questo caso sara' usato solamente il tasto (ESCAPE) per uscire dal ciclo,
come vedremo dopo. */
install_keyboard();
/* con 'set_gfx_mode(...); indichiamo al computer la modalità grafica che intendiamo
usare e la risoluzione grafica.
In questo caso la libreria è settata su 'AUTODETECT', in questo modo il computer
"sceglie" la modalità grafica più appropriata.
Ma esistono molte altre modalità grafiche sotto Windows! Ne citerò alcune:
GFX_TEXT
GFX_AUTODETECT_FULLSCREEN
GFX_AUTODETECT_WINDOWED
GFX_SAFE
GFX_DIRECTX
GFX_DIRECTX_ACCEL
GFX_DIRECTX_SOFT
GFX_DIRECTX_SAFE
GFX_DIRECTX_WIN
GFX_DIRECTX_OVL
GFX_GDI
Per maggiori chiarimenti potete visionare il file 'allegro.txt' allegato insieme
alla libreria. */
set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0); // inizializza il formato grafico //
/* Determina la dimensione del bitmap del buffer (buf) in una matrice di pixel X=320 e Y=200 */
buf = create_bitmap(320, 200);
/* Pulisce il buffer che è appena stato creato */
clear(buf);
/* Con 'while (...) {...}' viene creato un ciclo infinito in cui si svilupperà tutto il video gioco
fino a quando non verrà interrotto dall'utente premendo il tasto ESCAPE (ESC) */
while (!key[KEY_ESC]) {
/* inserisco qui la procedutra creata precedentemente per la visualizzazione
schermo 'doppiobuffering();' */
doppiobuffering();
}
/* Quando sarà interrotto il ciclo in seguito alla pressione del tasto ESCAPE
sarà necessario distruggere il bitmap della variabile (buf) per evitare problemi
di memoria con il comando 'destroy_bitmap(buf);' */
destroy_bitmap(buf);
}
/* 'END_OF_MAIN ();' è un comando di allegro per far funzionare la chiusura dei
programmi sotto Windows senza intoppi. */
END_OF_MAIN ();
/* Con questo semplice listato abbiamo creato la prima parte del nostro videogame:
quella che ci consentirà di visualizzare gli oggetti su schermo! */

Una volta compilato mi da i seguenti errori:
[Linker Error] undefined reference to `vsync'
[Linker Error] undefined reference to `_imp__screen'
[Linker Error] undefined reference to `blit'
[Linker Error] undefined reference to `clear_bitmap'
[Linker Error] undefined reference to `install_allegro'
[Linker Error] undefined reference to `install_keyboard'
[Linker Error] undefined reference to `set_gfx_mode'
[Linker Error] undefined reference to `create_bitmap'
[Linker Error] undefined reference to `_imp__key'
[Linker Error] undefined reference to `destroy_bitmap'
[Linker Error] undefined reference to `_WinMain'
ld returned 1 exit status

oregon
26-01-2009, 17:49
Devi indicare la libreria al compilatore ... (a proposito, quale?)

P.S. Dai un'occhiata al regolamento ...

benny92_wliga
26-01-2009, 17:53
la libreria e' allegro.h...

oregon
26-01-2009, 17:54
No. allegro.h e' un file include.

La libreria sta in un altro file, .lib o .a ... se non lo indichi al compilatore, il linker non potra' trovare il codice ...

benny92_wliga
26-01-2009, 17:55
Ahn...nn lo sapevo...io credevo ke fosse quella la libreria...cmq in una guiada mi hanno detto di scrivere quello!!

benny92_wliga
26-01-2009, 18:00
Cmq lei conosce la libreria!?!?!

oregon
26-01-2009, 18:00
Originariamente inviato da benny92_wliga
Ahn...nn lo sapevo...io credevo ke fosse quella la libreria...cmq in una guiada mi hanno detto di scrivere quello!!

Purtroppo, questo e' il risultato del voler programmare senza avere idea di quello che si fa, cercando aiuto nelle guide online ....

benny92_wliga
26-01-2009, 18:01
sto studiando per fare cio ma nn capisco gli errori di linker ke mi da...

oregon
26-01-2009, 18:03
Originariamente inviato da benny92_wliga
nn capisco gli errori di linker ke mi da...

Ti ho detto da cosa dipende ... devi indicare la libreria!

Ora, se non dici come stai lavorando (con quale sistema, compilatore, IDE ... ecc.) ne' indichi chiaramente se hai installato la libreria allegro o no, come si fa a rispondere ...?

benny92_wliga
26-01-2009, 18:05
sto lavorando con il dev c++ cm compilatore e ho installato la libreria facendo gli aggiornamenti..

Loading