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

[Allegro] skok postaci

Ostatnio zmodyfikowano 2012-06-03 15:28
Autor Wiadomość
Winner
Temat założony przez niniejszego użytkownika
[Allegro] skok postaci
» 2012-06-02 12:48:28
Mam problem, otóż chciałem zrobić takie coś, że po naciśnięciu jakiegoś klawisza postać zaczyna się wznosić, ale nie tak zwyczajnie. Tylko po nacisnięciu klawisza postac się szybko wznosi a potem coraz wolniej, aż w końcu osiąga predkość zerową(staje) i zaczyna powoli opadać i przyspiesza podczas opadania. Macie jakies pomysł jak to zrobić?
P-57692
m4tx
» 2012-06-02 13:17:52
postać zaczyna się wznosić, ale nie tak zwyczajnie. Tylko po nacisnięciu klawisza postac się szybko wznosi a potem coraz wolniej, aż w końcu osiąga predkość zerową(staje) i zaczyna powoli opadać i przyspiesza podczas opadania
To się grawitacja nazywa :P
P-57695
akwes
» 2012-06-02 13:24:16
s(k) = s(p) + v(p) * t + (a * t^2)/2

oraz G = 9,80665 m/s^2

Fizyka z gimnazjum...
P-57696
Winner
Temat założony przez niniejszego użytkownika
» 2012-06-02 13:56:22
A co znaczy w tym wzorze k i p?
P-57701
akwes
» 2012-06-02 14:01:03
Niestety nie mam tu indeksów dolnych i górnych.

k to końcowa, a p to początkowa.

Ogólnie to wzór powinieneś i tak kojarzyć :P Cały skok będziesz wyliczał z ruchu jednostajnego przyspieszonego i opóźnionego.
P-57702
Admixior
» 2012-06-02 19:38:44
Ja w jednym moim programie grawitację na postać załatwiłem w prosty sposób.
Ty też możesz tak zrobić. To taki zarys:
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
    }
}
Kawałek kodu robi to że postać powoli się wznosi(gdy speed jest na minusie), osiąga punkt zero (gdy speed jest równe zero), i opada (gdy speed na plusie)
Gdy skończy opadać może się tak stać (bardzo często) że ostatnie przesunięcie będzie za duże i postać wejdzie do podłoża więc trzeba przesunąć tak żeby była na równi. y=pos_y_podloza-pos_y_postaci;
kontakt z podlozem mozna w ten sam sposób obliczyć (pos_y_podloza>(pos_y_postaci+height_postaci))
P-57711
Winner
Temat założony przez niniejszego użytkownika
» 2012-06-03 15:28:23
Okey, dzięki wszystkim za odpowiedź. Postaram się coś wykombinować.
P-57742
« 1 »
  Strona 1 z 1