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

[ Allegro , c++ ]scrollowanie mapy w rzucie izometrycznym

Ostatnio zmodyfikowano 2013-11-19 15:19
Autor Wiadomość
Ageus
Temat założony przez niniejszego użytkownika
[ Allegro , c++ ]scrollowanie mapy w rzucie izometrycznym
» 2013-11-18 17:26:10
Witam.

Mam następujące fragmenty kodu

C/C++
void wyswmapy()
{
    for( int i = 0; i < 32; i++ )
    {
        for( int j = 0; j < 32; j++ )
        {
            xx =( j - i ) *( szerkafla / 2 );
            yy =(( j - 1 ) +( i - 1 ) ) *( wyskafla / 2 );
            if( mapa[ i ][ j ] == 1 )
            {
                masked_blit( kafel, bufor, 0, 0, xx, yy, 64, 48 );
            }
           
        }
    }
}

C/C++
void scrollowanie()
{
    if( key[ KEY_UP ] )
    {
        ybufora -= 48;
    }
    if( key[ KEY_DOWN ] )
    {
        ybufora += 48;
    }
    if( key[ KEY_LEFT ] )
    {
        xbufora -= 48;
    }
    if( key[ KEY_RIGHT ] )
    {
        xbufora += 48;
    }
}

C/C++
while( !key[ KEY_ESC ] )
{
    clear_to_color( bufor, makecol( 0, 0, 0 ) );
    wyswmapy();
    scrollowanie();
    while( speed > 0 )
    {
        speed--;
    }
    blit( bufor, screen, xbufora, ybufora, 0, 0, bufor->w / 2, bufor->h / 2 );
}
}

które mają wyświetlać i scrollować mapę izometryczną. Niestety po kilku kratkach kolejne kafle zaczynają nachodzić się na siebie jak na obrazku:
http://imageshack.com/a/img706​/8541/ixv9.png.

A dąże do prawidłowego scrollowania i wyświetlania mapy. Czy mógłby ktoś wytłumaczyć mi jak to zrobić?
P-96567
SeaMonster131
» 2013-11-18 20:00:39
Ja bym dał po prostu:
C/C++
masked_blit( kafel, bufor, 0, 0, xx + xbufora, yy + ybufora, 64, 48 );
P-96607
Ageus
Temat założony przez niniejszego użytkownika
» 2013-11-18 21:18:26
wkleiłem tę linijkę, i teraz z kolei scrollować mogę tylko o jedną kratkę w każdą stronę, ponieważ gdy puszczę klawisz kafle wracają z powrotem. Może po prostu dam cały kod, bo błąd może być w innym miejscu niż myślę?
P-96625
SeaMonster131
» 2013-11-18 21:33:22
Najwidoczniej zerujesz gdzieś w pętli zmienne xbufor, ybufor.
P-96630
Ageus
Temat założony przez niniejszego użytkownika
» 2013-11-19 15:19:05
Już wiem co było nie tak.

Zapomniałem w pętli głównej nie przestawiać bufora.

blit( bufor, screen, 0, 0, 0, 0, bufor->w / 2, bufor->h / 2 );

Przestawiłem na 0 i teraz działa.

Dzięki za pomoc, bo teraz obydwie rzeczy działają jak trzeba.
P-96657
« 1 »
  Strona 1 z 1