Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro] Podwójne Buforowanie nie działa

Ostatnio zmodyfikowano 2013-06-01 18:02
Autor Wiadomość
TNTeener
Temat założony przez niniejszego użytkownika
[Allegro] Podwójne Buforowanie nie działa
» 2013-06-01 17:55:22
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:
C/C++
#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()
P-84559
pekfos
» 2013-06-01 18:02:18
Co z tego, że masz bufor, skoro czyścisz ekran, czekasz (co najmniej) jedną milisekundę i dopiero budujesz bufor? Co z tego, że dodajesz "te linijki co w kursie", skoro wstawiasz je w kompletnie złym miejscu?

Prawidłowa kolejność:
  • czyszczenie bufora
  • wyświetlanie na buforze
  • wyświetlenie bufora na ekranie (bez czyszczenia ekranu)
P-84561
« 1 »
  Strona 1 z 1