Witam. Jako, że mam więcej czasu postanowiłem spróbować napisać prostą platformówkę. Przypomniałem sobie jednak, że kompletnie nie wiem jak się do tego zabrać :c
Podam przykład:
Mamy funkcję skok. Jak wiemy, wykonuje się ona w kilkuset klatkach a nie jednej. Zatem za każdym razem, przed jej wywołaniem musimy sprawdzić, czy gracz nie koliduje z jakimś obiektem (ziemią, platformą, itd.)
Jak przechować informację, że kolidujemy/nie kolidujemy i wywołać funkcję skok? Miałem coś na wzór tego pomysłu (tylko schematycznie):
bool czy_skok = false;
sf::Sprite gracz;
vector < sf::Sprite *> obiekty;
for( int i = 0; i < obiekty.size(); i++ )
{
if( gracz.getPosition.x < obiekty[ i ].getPosition.x && gracz.getPosition.x >( obiekty[ i ].getPosition.x + obiekty[ i ].getLocalBounds.lenght ) )
{
czy_skok = false;
break;
}
czy_skok = true;
}
if( czy_skok == true )
skok(...);
if( strzalka_w_gore )
skok(...);
Mam wątpliwości co do tego kodu. Są następujące problemy:
a) kilka faz skoku:
-odbija sie od ziemi
-jest w powietrzu
-spada
zauważmy, że kiedy stoi na ziemi (przed odbiciem sie od ziemi) też z ziemią koliduje. Z drugiej strony musi kiedyś spaść, wiec jeśli spadając będzie z czymś kolidował to ma przestać spadać. Wynika z tego, że stojąc (kolidując) nie bedzie mógł podskoczyć (co wynika z pętli)
Rozwiązałem to tak, ze NAJPIERW JEST SPRAWDZANE CZY KLIKNELISMY STRZALKE W GORE - jeśli klikniemy strzałkę w górę, to skoczymy (jesteśmy ponad ziemią, z niczym nie kolidujemy), a dopiero potem sprawdzane czy z czymś kolidujemy.
b) skok a spadanie
Mario idzie sobie po ziemi, po czym wskoczyl na platformę. Nie skacząc zszedł z niej (kolokwialnie - spadł). Tak więc w tym miejscu skoku nie będzie, tylko samo spadanie (choć mój kod wykryje to jako skok - z niczym nie kolidujemy)
c) gdzie trzymać zmienną mówiącą, z jaką prędkością podczas tego skoku się poruszamy. Oczywiście skok na wykresie powinien mieć postać sinusoidy.
d) nie można podskoczyć w powietrzu
e) możemy uderzyć o coś głową, mamy wtedy przestać lecieć w góre i zacząć spadać
Do sedna; czy jest jakiś kurs, strona - cokolwiek co pokazuje jak tworzyć gry i rozwiązywać tego typu problemy?
Bo chyba zasada działania jest taka sama? Widziałem, że często stosowane jest coś takiego jak
update ale nie wiem, jak to działa.
Musi być coś, jakiś sposób pisania, dzięki któremu kod gry jest sensownie ułożony
Nie wyobrażam sobie, jak można dziś tworzyć tak skomplikowane gry, jak najnowsze produkcję, kiedy przy skoku w grze 2D jest tyle problemów.