Obecnie tworzę grę w C # przy użyciu Direct X 9.0. Remake gry to Donkey Kong NES. Prawie wszystko zostało ukończone, ale mam problemy z fizyką skoku Mario. Mam zmienne zadeklarowane dla koordynacji Y i X.
Zastanawiałem się, czy istnieje prosta metoda zrobienia tego. Szukałem wysokiej i niskiej odpowiedzi, ale odpowiedzi, które znalazłem, są nieistotne / lub używają innego języka programowania, takiego jak XNA.
Obecnie mam ustawioną zmienną bool, aby sprawdzić, czy W został naciśnięty, a następnie uruchomi dowolny kod, aby go skoczył. Bałaganiłem takich jak.
if (jump == true)
{
Playerypos -= vel;
Playerxpos += vel;
}
Co nie działało tak dobrze. Szukałem odpowiedzi wysoko i nisko i teraz jestem zdesperowany, jeśli ktoś mógłby skierować mnie w dobrym kierunku na proste rozwiązanie. Byłoby świetnie. Bardzo ceniony za wszelkie odpowiedzi.
Odpowiedzi:
Po pierwsze, XNA również używa C #, więc jest to ten sam język programowania. I chociaż podstawowy interfejs API może mieć pewne różnice w stosunku do DirectX, nie ma to nic wspólnego ze skokami, więc te same samouczki lub odpowiedzi powinny mieć zastosowanie tutaj. Istnieje również wiele sposobów na wdrożenie tego, w zależności od wielu czynników. To, co opiszę poniżej, to tylko jedna z możliwości.
Podstawowe wymagania fizyki
Najpierw potrzebujesz podstawowych zmiennych fizycznych i obliczeń w swojej pętli aktualizacji. W szczególności potrzebujesz zdefiniować pozycję, prędkość i grawitację, a twoja pętla aktualizacji powinna robić coś mniej więcej podobnego (wykrywanie kolizji i reakcja pominięte dla uproszczenia):
Naprawiono skok wysokości
Teraz najłatwiejszym sposobem na wykonanie skoku, który zawsze ma tę samą wysokość, bez względu na to, jak długo naciskasz klawisz, jest po prostu zmiana prędkości pionowej raz. To sprawi, że postać zacznie się podnosić, a grawitacja automatycznie zajmie się jej sprowadzeniem:
Ważne Nie chcesz mieć możliwości rozpoczęcia skoku, jeśli twoja postać nie znajduje się na ziemi, więc musisz dodać na to czek.
Skok o zmiennej wysokości
Ale gry takie jak Mario i Sonic mają zmienny skok, którego wysokość zależy od tego, jak długo naciskasz przycisk. W takim przypadku musisz obsłużyć zarówno naciśnięcie, jak i zwolnienie klawisza skoku. Możesz dodać coś takiego:
Szczypanie wszystkie te wartości (czyli liczb, takich jak
0.5
,-12.0f
lub-6.0f
) w kodzie powyżej można zmienić atmosferę swojego skoku, jak wysoko skacze, ile pęd on zachować nawet po zwolnieniu przycisku skoku, jak szybko spada, etc .Ważne Nie wywoływaj tych funkcji w każdej ramce. Zadzwoń do nich tylko raz, gdy klawisz zostanie naciśnięty lub zwolniony. W przeciwnym razie twoja postać poleci zamiast skakać.
Przykład roboczy
Właśnie stworzyłem szybki przykład technik opisanych powyżej, które możesz wypróbować w przeglądarce tutaj (naciśnij przycisk myszy, aby skoczyć, zwolnij go w połowie, aby kontrolować wysokość skoku). Jest w JS, ale jak wspomniałem wcześniej, język nie ma znaczenia w tym przypadku.
http://jsfiddle.net/LyM87/
źródło
Jak w fizyce. Tylko w momencie, gdy naciskasz,
jump key
a postać jest na ziemi, zwiększ prędkość (zwana jest impulsem), ale cały czas spadaj pod wpływem grawitacji.Jeśli nie chcesz, aby postać skakała za każdym razem, gdy uderza o ziemię - ponieważ trzymasz
jump key
- dodajjump key is being pressed
zmienną, którą wyczyścisz pojump key
zwolnieniu i ustawieniu po niej. Pseudo kod:Gdybym użył Twojej drogi:
Jak
donkey.y
zmieni się twoja wyobraźnia. Prędkość powinna sprawić, że osioł o większej wadze będzie w powietrzu, aby wyglądał dobrze.źródło