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

[SDL] Skok postaci

Ostatnio zmodyfikowano 2025-06-03 21:52
Autor Wiadomość
JategoNwM
Temat założony przez niniejszego użytkownika
[SDL] Skok postaci
» 2013-01-05 16:59:27
Witam! Piszę sobie gierkę w C++ z wykorzystaniem bibloteki SDL. Wszystko pięknie gra chodzę w prawo, w lewo, ale... Nie moge skakać... Jak to zaprogramować??
P-73043
Gabes
» 2013-01-05 17:36:19
Wrocławski Portal Informatyczny.
http://informatyka.wroc.pl/node/422
P-73045
JategoNwM
Temat założony przez niniejszego użytkownika
» 2013-01-05 18:19:31
Czy to jest SDL???
P-73054
pekfos
» 2013-01-05 18:22:55
Czy to ma znaczenie?
P-73055
RazzorFlame
» 2013-01-12 13:12:47
@pekfos Troche znaczenia ma. Bynajmniej dla autora tematu. Na 100% będzie mu się lepiej pracowało z SDL niż np Allegro.

BTW. Tak to SDL
P-73660
Galfados
» 2013-01-15 18:51:26
Bardzo nierealistyczny skok ale skok:

Najpierw bym zrobił pseudo grawitacje coś w stylu


if (player.speedY < 40)
    player.speedY++;

potem gdy gracz wciśnie np spacje
to sprawdzamy czy dotyka ziemi, jeżeli tak to ustawiamy

player.speedY = -20;

I to chyba wszystko :>

Jak ci się uda to zaimplementować to pobaw się wartościami i wyjdzie Ci przybliżony efekt do tego co
chciałeś uzyskać.

Pozdrawiam, Galfados.
P-74058
termistor
» 2025-06-03 21:52:58
termistor:  
Witaj! Twoja odpowiedź jest technicznie poprawna, ale warto rozszerzyć ją o kilka kluczowych szczegółów, aby zwiększyć czytelność i praktyczność. Poniżej przedstawiam bardziej szczegółową wersję z wyjaśnieniem logiki:

1. Grawitacja – musi być obliczana w każdym klatce (np. w pętli głównej gry). Przykład:  
 
player.speedY += gravity; // gravity to stała np. 0.5f  
player.y += player.speedY;  
 
2. Skok – aktywowany tylko gdy gracz styka się z "ziemią". Przykład:  
 
if (key_pressed && is_on_ground) {  
    player.speedY = -jump_strength; // jump_strength to np. 10.0f  
    is_on_ground = false;  
}  
 
3. Kolizja – po skoku musisz sprawdzać, czy postać ponownie dotknie "ziemi". Przykład:  
 
if (player.y + player.height >= ground_level) {  
    player.y = ground_level - player.height;  
    player.speedY = 0;  
    is_on_ground = true;  
}  
 

Warto też zastosować interpolację do płynniejszego ruchu i ograniczenie prędkości spadania (np. `player.speedY = min(player.speedY, max_fall_speed)`).  

Dla lepszego efektu dodaj animację skoku i dźwięk. Pamiętaj, że wartości `gravity`, `jump_strength` i `max_fall_speed` powinny być dobrane do Twojej gry.  

Jeśli masz pytania o konkretne fragmenty kodu, chętnie pomogę. Powodzenia w tworzeniu gry!
P-182450
« 1 »
  Strona 1 z 1