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

[SFML]Skok postaci

Ostatnio zmodyfikowano 2013-06-06 17:19
Autor Wiadomość
Berux
Temat założony przez niniejszego użytkownika
[SFML]Skok postaci
» 2013-06-05 18:54:28
Witam. Piszę aktualnie platformówkę. A jak w każdej platformówce musi być możliwość skoku postacią. Postanowiłem się za to zabrać, a że nie mam żadnego pomysłu i jestem zielony w tych sprawach, postanowiłem, albo znaleźć jakiś algorytm, albo gotowy kod. I znalazłem kod Admixiora:
C/C++
float speed = - 2; //prędkość początkowa 2 px na klatke (minus dlatego że ma się poruszać do góry)
// petla glowna (rysujaca postac)
while( 1 )
{
    if( klawisz_spacja )
    {
        skok = true;
    }
   
    if( skok )
    {
       
        speed += 0.1f; //grawitacja co klatke oddzialowywuje na predkosc postaci
        postac.Move( 0, speed ); //Przesunięcie postaci (x,y)
        if( kontakt_z_podlozem )
        {
            postac.Move( 0, y ) //przesuwamy postac tak aby byla na rowni z podlozem
            //inaczej mogla by sie wtopic w nie
            skok = false;
        }
        wnd.Draw( postac ) //narysowanie postaci
    }
}

Co u mnie wygląda tak:
C/C++
float speed = - 2;
//...

if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Up )
     skok = true;


//...

if( skok )
{
    speed += 0.1f; //grawitacja co klatke oddzialowywuje na predkosc postaci
    ( bohater.grafika ).move( 0, speed );
   
    bohater.x += 0;
    bohater.y += speed;
   
   
    if( bohater.y ==( 600 -( 50 + 100 ) ) )
    {
        bohater.y =( 600 -( 50 + 100 ) );
        ( bohater.grafika ).setPosition( bohater.x, bohater.y );
       
        speed = - 2;
        skok = false;
       
    }
}


Wszystko działa bardzo dobrze, tylko mam jedno pytanie:
1. Co zrobić, żeby postać skakała wyżej?

Z góry dzięki :)
P-84981
pekfos
» 2013-06-05 20:37:20
Zwiększ prędkość?
P-84992
Berux
Temat założony przez niniejszego użytkownika
» 2013-06-05 21:12:54
Jak zwiększam prędkość, to właśnie niżej mi postać skacze, a jak zmniejszam, to nie zatrzymuje się na określonej pozycji - na podłożu.
P-84996
Mrovqa
» 2013-06-06 06:58:01
a jak zmniejszam, to nie zatrzymuje się na określonej pozycji - na podłożu.
W takim razie źle wykrywasz kolizje.
P-85034
Berux
Temat założony przez niniejszego użytkownika
» 2013-06-06 07:35:17
@Mrovqa

Podłoże jest na mapie kafelkowej - więc kolizji nie wykrywam. Po prostu napisałem wysokość, na której jest podłoże i przed zmniejszeniem prędkości wszystko było ok - po zwiększeniu także.
P-85035
pekfos
» 2013-06-06 15:19:03
Jak zwiększam prędkość, to właśnie niżej mi postać skacze, a jak zmniejszam, to nie zatrzymuje się na określonej pozycji - na podłożu.
Miałeś zwiększyć prędkość, a nie wartość zmiennej speed.

Źle wykrywasz kolizje z podłożem. Warunek jest zły i sprawia, że następna linia nie ma sensu:
C/C++
if( bohater.y ==( 600 -( 50 + 100 ) ) )
{
    bohater.y =( 600 -( 50 + 100 ) ); //przecież "bohater.y ==( 600 -( 50 + 100 ) )"!
P-85050
Berux
Temat założony przez niniejszego użytkownika
» 2013-06-06 17:05:02
Miałeś zwiększyć prędkość, a nie wartość zmiennej speed.

Sory, że pytam ale jestem w tych sprawach zielony. Prędkość, czyli co?

/edit:
To jaki warunek mógłbym tam dać, skoro platforma jest kafelkami na mapie kafelkowej?
P-85060
pekfos
» 2013-06-06 17:16:08
Najlepiej wykrywaj kolizje, a warunek np taki:
C/C++
if( bohater.y <= wtfy )

Sory, że pytam ale jestem w tych sprawach zielony. Prędkość, czyli co?
http://pl.wikipedia.org/wiki/Pr%C4%99dko%C5%9B%C4%87
Zapisujesz ją w speed, ale przy zwiększaniu/zmniejszaniu musisz uwzględniać zwrot.
P-85063
« 1 » 2
  Strona 1 z 2 Następna strona