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

[Allegro 4] Problem z animacją i skokiem.

Ostatnio zmodyfikowano 2012-09-22 17:47
Autor Wiadomość
Forczek
Temat założony przez niniejszego użytkownika
[Allegro 4] Problem z animacją i skokiem.
» 2012-09-21 20:55:48
Siemka, mam problem:
1. Z animacją
2. Ze skokiem.

no to tak:
1. Jeżeli postać idzie to dwie klatki nakładają się na siebie. Jeżeli jest atak i postać idzie wszystko jest dobrze.
2. Jeżeli postać idzie, to skok nie działa pełnie. Kiedy naciskam W skok jest mniej więcej w połowie do góry potem muszę dalej trzymać aby skok się zakończył. Jeżeli postać nie porusza się skok odbywa się bez problemu.

Dam tą część kodu w której są zawarte błędy:
C/C++
if( menu == 2 )
{
    blit( niebo, bufor, 0, 0, 0, 0, 1000, 700 );
    masked_blit( ziemia, bufor, 0, 0, ziemi[ 0 ], 500, ziemia->w, ziemia->h );
    masked_blit( ziemia, bufor, 0, 0, ziemi[ 1 ], 500, ziemia->w, ziemia->h );
    masked_blit( ziemia, bufor, 0, 0, ziemi[ 2 ], 500, ziemia->w, ziemia->h );
    masked_blit( ziemia, bufor, 0, 0, ziemi[ 3 ], 500, ziemia->w, ziemia->h );
    masked_blit( ziemia, bufor, 0, 0, ziemi[ 4 ], 500, ziemia->w, ziemia->h );
    masked_blit( ziemia, bufor, 0, 0, ziemi[ 5 ], 500, ziemia->w, ziemia->h );
    masked_blit( ziemia, bufor, 0, 0, ziemi[ 6 ], 500, ziemia->w, ziemia->h );
    masked_blit( ziemia, bufor, 0, 0, ziemi[ 7 ], 500, ziemia->w, ziemia->h );
    masked_blit( ziemia, bufor, 0, 0, ziemi[ 8 ], 500, ziemia->w, ziemia->h );
    masked_blit( ziemia, bufor, 0, 0, ziemi[ 9 ], 500, ziemia->w, ziemia->h );
    masked_blit( ziemia, bufor, 0, 0, ziemi[ 10 ], 500, ziemia->w, ziemia->h );
    if( mb == 1 )
    {
        atakk = true;
    }
    if( key[ KEY_D ] )
    {
        animacja = true;
        if( animacja == true )
        {
            chodzenie = true;
            ziemi[ 0 ] --;
            ziemi[ 1 ] --;
            ziemi[ 2 ] --;
            ziemi[ 3 ] --;
            ziemi[ 4 ] --;
            ziemi[ 5 ] --;
            ziemi[ 6 ] --;
            ziemi[ 7 ] --;
            ziemi[ 8 ] --;
            ziemi[ 9 ] --;
            ziemi[ 10 ] --;
            if( frame < 50 ) { draw_sprite( bufor, chodzenie1, wiking_x, wiking_y ); }
            else if( frame >= 50 && frame < 100 ) { draw_sprite( bufor, chodzenie2, wiking_x, wiking_y ); }
            if( atakk == false )
            {
                masked_blit( wiking, bufor, 0, 0, wiking_x, wiking_y, wiking->w, wiking->h );
            }
        }
    }
    else
    {
        animacja = false;
        chodzenie = false;
    }
    if( atakk == true )
    {
        animacja = true;
        if( animacja == true )
        {
            if( frame < 50 ) { draw_sprite( bufor, atak1, wiking_x, wiking_y ); }
            else if( frame >= 50 && frame < 100 ) { draw_sprite( bufor, atak2, wiking_x, wiking_y ); }
            if( chodzenie == true )
            {
                if( frame < 50 ) { draw_sprite( bufor, chodzenie1, wiking_x, wiking_y ); }
                else if( frame >= 50 && frame < 100 ) { draw_sprite( bufor, chodzenie2, wiking_x, wiking_y ); }
            }
            else
            {
                masked_blit( stanie, bufor, 0, 0, wiking_x, wiking_y, stanie->w, stanie->h );
            }
        }
    }
    else
    {
        animacja = false;
    }
    if( key[ KEY_W ] )
    {
        skok[ 0 ] = true;
    }
    if( skok[ 0 ] == true )
    {
        if( skok[ 1 ] == true )
        {
            wiking_y--;
            if( wiking_y == 175 )
            {
                skok[ 1 ] = false;
            }
        }
        if( skok[ 1 ] == false )
        {
            wiking_y++;
            if( wiking_y == 375 )
            {
                skok[ 0 ] = false;
                skok[ 1 ] = true;
            }
        }
    }
    if( animacja == false )
    {
        masked_blit( stanie, bufor, 0, 0, wiking_x, wiking_y, stanie->w, stanie->h );
        masked_blit( wiking, bufor, 0, 0, wiking_x, wiking_y, wiking->w, wiking->h );
    }
    if( ziemi[ 1 ] == 0 )
    {
        ziemi[ 0 ] = 0;
        ziemi[ 1 ] = 100;
        ziemi[ 2 ] = 200;
        ziemi[ 3 ] = 300;
        ziemi[ 4 ] = 400;
        ziemi[ 5 ] = 500;
        ziemi[ 6 ] = 600;
        ziemi[ 7 ] = 700;
        ziemi[ 8 ] = 800;
        ziemi[ 9 ] = 900;
        ziemi[ 10 ] = 1000;
    }
    if( key[ KEY_Q ] )
    {
        menu = 1;
    }
    blit( bufor, screen, 0, 0, 0, 0, 1000, 700 );
}
Jeżeli są jakieś pytania bez których nie rozwiążecie problemu, piszcie.
P-65362
hincu
» 2012-09-22 17:47:46
na twoim miejscu poczytalbym troche o tworzeniu animacji jak i fizyki...
P-65397
« 1 »
  Strona 1 z 1