Erstens verwendet XNA auch C #, so dass es sich um dieselbe Programmiersprache handelt. Auch wenn die zugrunde liegende API einige Unterschiede zu DirectX aufweist, hat dies nichts mit Springen zu tun. Daher sollten hier dieselben Lernprogramme oder Antworten gelten. Es gibt auch zahlreiche Möglichkeiten, dies in Abhängigkeit von vielen Faktoren zu implementieren. Was ich im Folgenden beschreiben werde, ist nur eine der Möglichkeiten.
Grundlegende physikalische Anforderungen
Zunächst benötigen Sie einige grundlegende physikalische Variablen und Berechnungen für Ihre Aktualisierungsschleife. Insbesondere müssen Position, Geschwindigkeit und Schwerkraft definiert sein, und Ihre Aktualisierungsschleife sollte ungefähr so verfahren (Kollisionserkennung und Reaktion sind der Einfachheit halber weggelassen):
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
}
Sprung in fester Höhe
Der einfachste Weg, einen Sprung zu realisieren, der immer die gleiche Höhe hat, egal wie lange Sie die Taste drücken, besteht darin, die vertikale Geschwindigkeit einmal zu ändern. Dies lässt den Charakter aufsteigen, während die Schwerkraft automatisch dafür sorgt, dass er niedergeschlagen wird:
void OnJumpKeyPressed()
{
velocityY = -12.0f; // Give a vertical boost to the players velocity to start jump
}
Wichtig Sie möchten nicht in der Lage sein, einen Sprung zu starten, wenn sich Ihr Charakter nicht auf dem Boden befindet. Daher müssen Sie einen Check hinzufügen.
Variabler Höhensprung
Spiele wie Mario und Sonic haben jedoch einen variablen Sprung, dessen Höhe davon abhängt, wie lange Sie den Knopf drücken. In diesem Fall müssen Sie die Sprungtaste drücken und loslassen. Sie könnten etwas hinzufügen wie:
void OnJumpKeyReleased()
{
if(velocityY < -6.0f) // If character is still ascending in the jump
velocityY = -6.0f; // Limit the speed of ascent
}
Tweaking all diese Werte (dh die Zahlen wie 0.5
, -12.0f
oder -6.0f
) in dem obigen Code Sie das Gefühl von Ihrem Sprung ändern können, wie hoch er springt, wie vielen Schwung hält er auch nach dem Sprung Taste loslassen, wie schnell fällt ihm, etc .
Wichtig Rufen Sie diese Funktionen nicht bei jedem Frame auf. Rufen Sie sie nur einmal auf, wenn die Taste gedrückt oder losgelassen wird. Sonst fliegt dein Charakter anstatt zu springen.
Arbeitsbeispiel
Ich habe soeben ein kurzes Beispiel für die oben beschriebenen Techniken erstellt, die Sie hier in Ihrem Browser ausprobieren können (drücken Sie die Maustaste, um zu springen, lassen Sie sie in der Mitte los, um die Höhe des Sprungs zu steuern). Es ist in JS, aber wie ich bereits erwähnt habe, ist die Sprache in diesem Fall irrelevant.
http://jsfiddle.net/LyM87/