Bawię się w Allegro, robiąc niby-pacmana. Problem jest taki, że po wyświetleniu planszy na ekranie pacman ‘zjada plansze’. najlepiej pokaże na przykładzie:
http://img808.imageshack.us/i/pacman1.png/ przed
http://img843.imageshack.us/i/beztytuutt.png/ po
A tutaj kod:
#include
int main()
{
allegro_init();
install_keyboard();
set_color_depth(16);
set_gfx_mode(GFX_AUTODETECT_WINDOWED,640,480,0,0);
clear_to_color(screen, makecol(128,128,128));
//KOD!
BITMAP *bufor = NULL; // Wskaźnik buforu
BITMAP *pacman = NULL; // Wskaźnik pacmana
BITMAP *duch1 = NULL; // Wskaźnik Ducha nr 1
BITMAP *plansza = NULL; // Wskaźnik planszy
// Utworz bufor
bufor = create_bitmap(640,480);
//Załaduj pacmana
pacman = load_bmp("pacman.bmp",default_palette);
//Załaduj ducha1
duch1 = load_bmp("duch1.bmp",default_palette);
// Załaduj planszę
plansza = load_bmp("plansza.bmp",default_palette);
// Utwórz wsółrzędne pacmana
int pacman_x = 100, pacman_y = 100;
// Utwórz współrzędne ducha1
int duch1_x = 50, duch1_y = 50;
// Pętla
while( !key[KEY_ESC])
{
if( key[KEY_LEFT]) pacman_x--;
if( key[KEY_RIGHT]) pacman_x++;
if( key[KEY_UP]) pacman_y--;
if( key[KEY_DOWN]) pacman_y++;
if( pacman_x >= 610) pacman_x--;
if( pacman_x <= 0) pacman_x++;
if( pacman_y >= 450) pacman_y--;
if( pacman_y <=0) pacman_y++;
masked_blit( pacman, plansza, 0,0, pacman_x, pacman_y, pacman->w, pacman->h);
// Przenieś planszę na bufor i bufor na okno
blit( plansza, bufor, 0,0,0,0, 640,480);
blit( bufor, screen, 0,0,0,0, 640,480);
}
// Usun bitmapy
destroy_bitmap(pacman);
destroy_bitmap(bufor);
allegro_exit();
return 0;
}
END_OF_MAIN();