Cześć. Robię sobię taki symulatorek wyśćigów ale już na przy podwójnym buforowaniu mam problem. Dodaje te linijki kodu co w kursie ale dalej ekran miga. Dodam że na bufor najpierw wstawiam taki jakby drugi.To nie robi róznicy oprócz tego że się wtedy nie rozmazuje samochód. Dobra pokazuje kod:
#include <allegro.h>
int main()
{
allegro_init();
install_keyboard();
set_color_depth( 16 );
set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
clear_to_color( screen, makecol( 128, 128, 128 ) );
BITMAP * ludek = NULL;
BITMAP * bufor = NULL;
BITMAP * tlo = NULL;
ludek = load_bmp( "tex/ludek.bmp", default_palette );
if( !ludek )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "Nie mozna zaladowac pliku 'ludek.bmp'!" );
allegro_exit();
return 0;
}
bufor = create_bitmap( 640, 480 );
if( !bufor )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "Nie moge utworzyc bufora !" );
allegro_exit();
return 0;
}
tlo = create_bitmap( 640, 480 );
if( !tlo )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "Nie moge utworzyc tla !" );
allegro_exit();
return 0;
}
int ludek_x = 100, ludek_y = 100;
while( !key[ KEY_ESC ] )
{
if( key[ KEY_LEFT ] ) ludek_x--;
if( key[ KEY_RIGHT ] ) ludek_x++;
if( key[ KEY_UP ] ) ludek_y--;
if( key[ KEY_DOWN ] ) ludek_y++;
clear_to_color( screen, makecol( 150, 150, 150 ) );
rest( 1 );
masked_blit( ludek, bufor, 0, 0, ludek_x, ludek_y, ludek->w, ludek->h );
blit( bufor, screen, 0, 0, 0, 0, 640, 480 );
blit( tlo, bufor, 0, 0, 0, 0, 640, 480 );
blit( ludek, tlo, 0, 0, 0, 0, 640, 480 );
blit( ludek, bufor, 0, 0, 0, 0, 640, 480 );
}
destroy_bitmap( ludek );
destroy_bitmap( bufor );
destroy_bitmap( tlo );
allegro_exit();
return 0;
}
END_OF_MAIN()