Równia pochyła w grze - oprogramowanie ludzika

0

Piszę grę w Delphi, problem pojawił się w chwili gdy na planszy gry umieściłem platformę która jest pochylona w górę i prawą stronę. Zastanawialiście się kiedyś jaki kod napisać żeby ludzik ładnie wchodził na tą platformę (czyli jeśli idzie w prawo, jednocześnie idzie w górę po platformie). Jeśli idzie w lewo (schodzi w dół). Według mnie trzeba użyć tablic z danymi o platformie, a Wy co o tym sądzicie?

0

Nie pisałem nigdy gier, nie wiem jak masz opisany ruch postaci ale jakbym pisał to podszedłbym do problemu w prosty sposób (chyba że w trakcie coś by się zmieniło). Dla pochylni znasz kąt nachylenia. Wiesz ile wynosi twój ruch postaci w bok. Z tangensa policzył bym położenie w osi pionowej. Jeśli ruch miałby być jeszcze dokładniejszy (zawsze ta sama odległość ruchu w bok wzdłuż wektora kierunki a nie osi poziomej) to z sinusa liczysz położenie w osi pionowej.

0

Prosty sposób implementacji terenu oraz mechanizmu przeprowadzania kolizji i wyrównywania bohatera z platformami opisany jest dość szczegółowo w starym artykule pt. Programming M.C. Kids – zachęcam do przeczytania.


Wszystko zależy od wymagań – czy poziom jest podzielony na kafle i typów kafli jest określona liczba, czy kształt platform może być dowolny (czyli dowolnie nieregularny); czy kolizje przeprowadza się na podstawie punktu (hot spotu) czy obszaru (hit boksu).

Artykuł który podlinkowałem wyżej będzie pomocny, jeśli krzywizna terenu ma być nieskomplikowana i chciałbyś sam zaimplementować cały mechanizm interakcji bohatera z otoczeniem. Normalnie to korzysta się z gotowych funkcji służących do przeprowadzania kolizji i będących częścią API frameworka dotyczącą fizyki.

1

Zakładam, że masz jakąś zmienną vspeed która udaje "grawitacje" w obiekcie ludzika, będąc na platformie (kolizja ludzika z platformą) dajesz ten vspeed na zero,
w lewo np.
x-=4; y+=1
w prawo
x+=4; y-=1
gdzie 4 to prędkość ludzika na jednego fpsa, a 1 to przechylenie platformy na tych 4 pikselach

1 użytkowników online, w tym zalogowanych: 0, gości: 1