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

podwojne buforowanie pomocy !

Ostatnio zmodyfikowano 2009-11-28 11:37
Autor Wiadomość
golasek1992
Temat założony przez niniejszego użytkownika
podwojne buforowanie pomocy !
» 2009-11-28 08:01:26
C/C++
#include <allegro.h>
#include <ctime>

void init();
int main()
{
   
    float x = 100, y = 100, kx = 0.2, ky = 0.3, x1, y1, v = 2;
    allegro_init();
    install_timer();
    install_mouse();
    install_keyboard();
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
    BITMAP * bufor = NULL;
    BITMAP * bmp = NULL;
   
    bufor = create_bitmap( 800, 600 );
    if( !bufor )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć bufora !" );
        allegro_exit();
        return 0;
    }
   
    while( !key[ KEY_ESC ] )
    {
        srand(( time( NULL ) ) );
        circle( bmp, x, y, 40, makecol( 255, 20, 128 ) );
       
        if( x >= 760 )
        {
            kx =- kx;
            kx =-( rand() % 9 + 0.3 ) / 10;
            v =( rand() % 13 + 0.5 ) / 10;
           
        }
       
        if( x <= 40 )
        {
            kx =- kx;
            kx =( rand() % 9 + 0.3 ) / 10;
            v =( rand() % 13 + 0.5 ) / 10;
           
        }
       
        if( y >= 560 )
        {
            ky =- ky;
            ky =-( rand() % 10 + 0.2 ) / 10;
            v =( rand() % 13 + 0.5 ) / 10;
           
        }
       
        if( y <= 40 )
        {
            ky =- ky;
            ky =( rand() % 10 + 0.2 ) / 10;
            v =( rand() % 13 + 0.5 ) / 10;
           
        }
       
       
        x1 = x + kx * v;
        y1 = y + ky * v;
        x = x1;
        y = y1;
       
       
        clear_to_color( bufor, makecol( 0, 0, 0 ) );
        masked_blit( bmp, bufor, 0, 0, x, y, x->w, y->h );
        blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
       
       
       
       
       
    }
    destroy_bitmap( bufor );
    allegro_exit();
    return 0;
}
END_OF_MAIN();
 

Ten kodzik odbija kólke od scian ekranu ktora przy kazdym odbiciu zmienia swoją szybkość i kat nachylenia. Wszystko byloby fajnie tylko ze ekran miga jak mozna sie domyslec z tematu. Według kursu ktory czytalem na tej stronie potrafie zrobic podwojne buforowanie jezeli mam obrazek dolaczony z ,,zewnatrz" ale jezeli maluje cos w allegro to nie wiem jak wymalowac to na bitmapie i co napisac zeby ladowalo ta bitmape na ekran. Bardzo proszę o pomoc. Najlepiej prosze o gotowe fragmenty i jeżeli można to z małym wytłumaczeniem - dlaczego.
P-11833
DejaVu
» 2009-11-28 09:05:15
Nic nie może mrugać, bo kod się nie kompiluje.
C/C++
masked_blit( bmp, bufor, 0, 0, x, y, bmp->w, bmp->h );
P-11834
golasek1992
Temat założony przez niniejszego użytkownika
podwojne buforowanie
» 2009-11-28 10:29:41
C/C++
circle( screen, x, y, 40, makecol( 255, 20, 128 ) );

clear_bitmap( screen );

//clear_to_color(bufor, makecol(0,0,0));
//masked_blit( bmp, bufor, 0,0, x, y, x->w, y->h);
//blit( bufor, screen, 0,0,0,0, 800,600);

zapisujac tak miga... a mi chodzi o to zeby wykorzystac podwojne buforowanie i zeby mi ktos pomosgl jak to napsiac a to ze sie nie kompiluje to akurat wiem... to byla proba ktora mi nie wyszla i chcialem zeby ktos mnie skorygowal. takich postow typu to nie dziala mi nie potrzeba ...
P-11836
Proxym
» 2009-11-28 10:37:00
Rysuj kółko na "bufor" nie na "screen", a potem bufor na końcu ładujesz, zaznaczam, że liballegro nigdy nie tykałem.
P-11837
golasek1992
Temat założony przez niniejszego użytkownika
podwojne buforowanie
» 2009-11-28 11:08:32
Tak ja pisales narysowalem kolko na buforze:

circle(bufor, x, y, 40, makecol(255,20,128)); - mam nadzieje ze tak ;p
clear_to_color(bufor, makecol(0,0,0));

Tylko nie wiem co z tymi funkcjami ( jak ma wygladac masked_blit?)

masked_blit( circle, bufor 0,0, x, y, x->w, y->h);
blit( bufor, screen, 0,0,0,0, 800,600);

jak narysowalem tak:
circle(bufor, x, y, 40, makecol(255,20,128));
clear_to_color(bufor, makecol(0,0,0));
//masked_blit( circle, bufor 0,0, x, y, x->w, y->h);
blit( bufor, screen, 0,0,0,0, 800,600);

To byl czarny ekran i ani sladu kulki :{ napisz jak mzoesz jak maja wygladac te funkcje
P-11845
DejaVu
» 2009-11-28 11:29:17
Nic dziwnego, jeśli najpierw rysujesz kulkę na buforze, a potem czyścisz go, a następnie czysty bufor wyświetlasz :) zmień kolejność.
P-11846
golasek1992
Temat założony przez niniejszego użytkownika
podwojne buforowanie
» 2009-11-28 11:37:18
Dzieki wielkie super dziala ;] zamykam temat
P-11850
« 1 »
  Strona 1 z 1