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

[Allegro] Podczas skakania postac jest za szybka.

Ostatnio zmodyfikowano 2013-12-26 22:39
Autor Wiadomość
Evermind
Temat założony przez niniejszego użytkownika
[Allegro] Podczas skakania postac jest za szybka.
» 2013-12-25 12:14:02
Siemka. Ogladam aktualnie tutorial coddingmadeeasy na temat platformowek w Allegro4. Jestem po 11 filmiku. Pisze u siebie to samo co autor, zeby to zrozumiec na swoj sposob ;p. Ogolnie wszystko jest okej - kolizje w porzadku, postac skacze, ale no wlasnie. Gdy chodze nia w prawo, lewo to predkosc chodzenia jest nromalna("moje oko" wszystko widzi), ale gry nia podskocze, to dzieje sie to bardzo szybko:
1. Postac jest na ziemi.
2. Nie mija ulamek sekundy, postac jest w punkcie "granicznym" skoku.
3. Postac jest znowu na ziemii.

Ogolnie jakos zaznajomiony nie jestem z allegro, wiec prosze nie krzyczec jesli robie cos glupiego. Uwazam jednak, ze nie jest to zwiazane z moim kodem, ale jednak z komputerem(dwa rdzenie czy cos w tym stylu). Jezeli trzeba bedzie to moge wrzucic kod, ktory jednak wg. mnie jest identyczny jak autora na yt ;P

Pozdrawiam

P-100102
MrPoxipol
» 2013-12-25 12:37:18
Prędzej z kodem. Pokaż kod :)
P-100103
Evermind
Temat założony przez niniejszego użytkownika
» 2013-12-25 12:48:09
Ok.

To main
C/C++
int main()
{
    allegro_init();
    install_keyboard();
    install_mouse();
    install_timer();
    install_sound( DIGI_AUTODETECT, MIDI_AUTODETECT, "A" );
    set_color_depth( 32 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, ScreenWidth, ScreenHeight, 0, 0 );
    set_window_title( "Wilq" );
   
    LOCK_VARIABLE( counter );
    LOCK_FUNCTION( Increment );
    install_int_ex( Increment, BPS_TO_TIMER( 100 ) );
   
    BITMAP * Buffer = create_bitmap( 6000, 600 );
   
    Player player;
    Camera camera;
    Map map;
    Collision collision;
   
    player.Init();
    camera.Init();
    map.Init();
    collision.Init();
   
    bool done = false;
    while( !done )
    {
        while( counter > 0 )
        {
            //Input
            if( key[ KEY_ESC ] )
                 done = true;
            //Update
            map.Update();
            player.Update();
            collision.Update( Buffer, player );
            camera.Update( player.x, player.y );
            counter--;
        }
        //Draw
        map.Draw( Buffer );
        player.Draw( Buffer );
        camera.Draw( Buffer );
        clear_bitmap( Buffer );
    }
    return 0;
}
END_OF_MAIN()

Tutaj player.cpp nie caly. hDir to jest poziomy kierunek(jest ustawiony na 0), vDir to pionowy(ma wartosc 2 gdy jest na ziemii, przy 1 jest w powietrzu)
C/C++
void Player::Controls()
{
    if( key[ KEY_LEFT ] )
    {
        velx =- speed;
        hDir = 2;
    }
    else if( key[ KEY_RIGHT ] )
    {
        velx = speed;
        hDir = 1;
    }
    else
    {
        velx = 0;
        hDir = 0;
    }
    if( key[ KEY_UP ] && jump == true )
    {
        vely = jumpspeed;
        platform = false;
        jump = false;
        vDir = 1;
    }
   
}


void Player::SetPosition()
{
    if( vely >= 0 )
    {
        vDir = 2;
    }
   
    if( platform == false )
    {
        vely += gravity;
    }
    else
    {
        vely = 0;
    }
   
    x += velx;
    y += vely;
    x2 += x + width;
    y2 += y + height;
}
P-100104
Evermind
Temat założony przez niniejszego użytkownika
» 2013-12-25 17:50:37
Tutaj caly kod jesli ktos potrzebuje.

http://www.speedyshare.com​/hqv3P/Wilq.rar
P-100113
Evermind
Temat założony przez niniejszego użytkownika
» 2013-12-26 03:03:36
Sorry, ze tak pisze posty pod soba, ale zalezy mi zeby ktos sprobowal chociaz mi pomoc :D

Przez przypadek podczas kolejnego siedzenia i wpatrywania sie w kod, "odkrylem, ze gdy staje na skraju 'mapy'(bo na razie jest ona krotka) i wykonujac skok za krawedz mapy, wszystko wyglada normalnie - jedynie skaczac na mapie nie wykonuje sie to poprawnie - jakis pomysl?
P-100136
pekfos
» 2013-12-26 14:22:44
wykonujac skok za krawedz mapy, wszystko wyglada normalnie
Odpowiedz sobie na pytanie: Co to zmienia? Wtedy pewnie znajdziesz błąd. Strzelam, że to coś z wywołaniami Player::SetPosition() i/lub zmienną platform.
P-100161
Evermind
Temat założony przez niniejszego użytkownika
» 2013-12-26 22:19:26
Ok popatrze. Mam jednak  pytanie ktore mnie nurtuje troche.

W player.cpp mam metode 'init' ktora ma takie zmienne:

C/C++
width = 10;
height = 10;
x =( ScreenWidth - width ) / 2; // (800-10)/2= 395
y =( ScreenHeight - height ) / 2; // (600-10)/2= 295
x2 = x + width;
y2 = y + height;

W metodzie 'draw' mam cos takiego:

C/C++
rectfill( Buffer, x, y, x + 10, y + 10, makecol( 255, 0, 0 ) );
i w tym przypadku wszystko jest okej - rysuje sie kwadracik 10 na 10.

Jednak gdy zmienie kod na:
C/C++
rectfill( Buffer, x, y, x2, y2, makecol( 255, 0, 0 ) );
Otrzymuje mniej wiecej taki efekt:
http://i42.tinypic.com​/2d9gcy.jpg

A wydaje mi sie, ze to co mam w 'init' powinno spowodac, ze zostanie narysowane to samo chyba, ze jestem nie ogarniety jakos?

P-100256
pekfos
» 2013-12-26 22:21:03
C/C++
// void Player::SetPosition()
x2 += x + width;
y2 += y + height;
P-100257
« 1 » 2
  Strona 1 z 2 Następna strona