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):
float positionX, positionY; // Position of the character
float velocityX, velocityY; // Velocity of the character
float gravity = 0.5f; // How strong is gravity
void Update(float time)
{
positionX += velocityX * time; // Apply horizontal velocity to X position
positionY += velocityY * time; // Apply vertical velocity to X position
velocityY += gravity * time; // Apply gravity to vertical velocity
}
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:
void OnJumpKeyPressed()
{
velocityY = -12.0f; // Give a vertical boost to the players velocity to start jump
}
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:
void OnJumpKeyReleased()
{
if(velocityY < -6.0f) // If character is still ascending in the jump
velocityY = -6.0f; // Limit the speed of ascent
}
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/