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

[Allegro] Buforowanie a rysowanie

Ostatnio zmodyfikowano 2009-01-03 10:54
Autor Wiadomość
Damien
Temat założony przez niniejszego użytkownika
» 2009-01-02 22:33:56
Wybacz ale nie zrozumiałem do końca :). Na buforze 1 rysowany jest rysunek gracza, potem to przenoszone jest na bufor 2 (tu rysowane jest tło i ludzik) potem to wszystko przenoszone jest na trzeci (właśnie zorientowałem sie że nie potrzebnie xD) i potem na screen. Rysunek gracza musi być zawsze na pierwszym bo potem to musi być przeniesione na kolejny żeby tam coś dorysować. A jak zamienię 1 z 2 to bufor pierwszy którym jest białe tło i rysunek gracza zasłoni wszystko i nie będzie widać nic oprócz niego.
P-3252
Damien
Temat założony przez niniejszego użytkownika
» 2009-01-02 22:37:36
<ta wiadomość jest do usunięcia przez moderatora> wybaczcie dwa razy kliknąłem zapisz :/
P-3254
lynx
» 2009-01-02 22:43:22
Nie widzę sensu rysowania ludzika w buforze 1, a potem od nowa w buforze 2. Problem, że rysunek rysowany jest za tłem można rozwiązać rysując rysunek nad tłem, zmieniając kolejność blitów.

/edit1:
Może wyjaśnię to inaczej jak bym ja to zrobił jeżeli chodzi o bufory. :)
W pierwszym buforze byłaby rysowana mapa czy tam co innego chcesz w każdym bądź razie to co ma zostać na całą grę/misję np trasa narysowana przez użytkownika. :)
W drugim najpierw narysowane by było tło takie jak budynek, niebo. Następnie bufor 1 (trasa), a na końcu ludzik.
W trzecim buforze czyli ekranie (screen), który masz już zdeklarowany wyświetla się bufor 2, czyli całość.
P-3255
Damien
Temat założony przez niniejszego użytkownika
» 2009-01-02 23:42:02
To może ja swój kod podeśle bo nadal wg mnie sie nie zrozumieliśmy(a może to tylko ja ?):)
Tak wyglądają bufory:

C/C++
bufor = create_bitmap( 800, 600 );
bufor2 = create_bitmap( 800, 600 );
bufor3 = create_bitmap( 800, 600 );

Tak wygląda rysowanie:

C/C++
while( mouse_b == 1 )
{
    mx = mouse_x;
    my = mouse_y;
    circlefill( bufor, mx, my - bufy, 3, makecol( 0, 0, 0 ) );
    blit( bufor, bufor2, 0, 0, 0, bufy, 800, 600 );
    blit( bufor2, screen, 0, 0, 0, 0, 800, 600 );
}
blit( bufor, bufor2, 0, 0, 0, bufy, 800, 600 );

kiedy gracz odkliknie lpm wtedy pozycja y bufora jest zwiększana żeby był efekt "grawitacji" wtedy wygląda tak jakby rysunek opadał na dół. Jeśli opadnie wystarczająco to jest czyszczony i przywracany znów na pozycję y=0. Na końcu oczywiście przeniesienie bufora 1 na bufor 2.
Potem:

C/C++
masked_blit( floor, bufor2, 0, 0, xpodl, ypodl, 400, 200 );
masked_blit( build1, bufor2, 0, 0, build1x, 115, 400, 600 );

Jest to wyświetlenie podłoża i budynku na buforze 2. Czyli mamy rysunek z bufora 1 + dorysowanie tła.
Później:

C/C++
klatka++;
switch( klatka )
{
case 1:
    masked_blit( human, bufor2, 2, animation, xhuman, yhuman, humanw, humanh );
    break;
case 2:
    masked_blit( human, bufor2, 81, animation, xhuman, yhuman, humanw, humanh );
    break;
case 3:
    masked_blit( human, bufor2, 160, animation, xhuman, yhuman, humanw, humanh );
    break;
case 4:
    masked_blit( human, bufor2, 241, animation, xhuman, yhuman, humanw, humanh );
    break;
case 5:
    masked_blit( human, bufor2, 320, animation, xhuman, yhuman, humanw, humanh );
    break;
case 6:
    masked_blit( human, bufor2, 399, animation, xhuman, yhuman, humanw, humanh );
    break;
case 7:
    masked_blit( human, bufor2, 478, animation, xhuman, yhuman, humanw, humanh );
    break;
case 8:
    masked_blit( human, bufor2, 557, animation, xhuman, yhuman, humanw, humanh );
    break;
case 9:
    masked_blit( human, bufor2, 636, animation, xhuman, yhuman, humanw, humanh );
    break;
case 10:
    masked_blit( human, bufor2, 717, animation, xhuman, yhuman, humanw, humanh );
    break;
}
if( klatka == 10 ) klatka = 0;

blit( bufor2, bufor3, 0, 0, 0, 0, 800, 600 );
Jest to wyświetlenie odpowiedniej klatki ludzika na buforze 2.
Czyli teraz do tła dorysowany jest ludzik.
Teraz, jeśli zamienię bufor z buforem2 to nie będzie nic widać oprócz tego rysunku który narysował gracz bo bufor wszystko zasłoni.

PS. Dodam jeszcze, że rysunek który będzie rysowany na bieżąco przez gracza ma być interaktywny.
P-3271
lynx
» 2009-01-02 23:55:22
Trochę to zagmatfane. ;) A w czym jeszcze raz leży problem?? Po szybkim zerknięciu na kod zauwarzyłem że nie wyświetlasz w ogóle bufora 3.
P-3277
Damien
Temat założony przez niniejszego użytkownika
» 2009-01-03 09:10:53
Przeczytałem ponownie twoje wiadomości zastanawiając się w czym jest problem. Wiem już!!! Wyświetlałem bufor z rysunkiem na buforze z tłem za pomocą blit, a powinno być za pomocą masked_blit. WoW dopiero teraz na to wpadłem. Teraz twoja rada działa i wszystko gra :):):)
P-3291
lynx
» 2009-01-03 10:54:42
Spoko, fajnie że pomogłem. ;)
P-3294
1 « 2 »
Poprzednia strona Strona 2 z 2