Ich mache gerade ein Spiel in C # mit Direct X 9.0. Das Remake des Spiels ist Donkey Kong NES. Ich habe fast alles abgeschlossen, aber ich habe Probleme mit der Physik von Marios Sprung. Ich habe Variablen für die Y- und X-Koordination deklariert.
Ich habe mich gefragt, ob es dafür eine einfache Methode gibt. Ich habe hoch und niedrig nach einer Antwort gesucht, aber die Antworten, die ich gefunden habe, sind entweder irrelevant / oder verwenden eine andere Programmiersprache wie XNA.
Ich habe momentan eine Bool-Variable gesetzt, um zu prüfen, ob W gedrückt wurde. Dadurch wird ein Code ausgelöst, der ihn zum Springen bringt. Ich habe herumgespielt wie.
if (jump == true)
{
Playerypos -= vel;
Playerxpos += vel;
}
Was nicht so gut funktioniert hat. Ich habe hoch und tief nach einer Antwort gesucht und jetzt bin ich verzweifelt, ob mich jemand auf eine einfache Lösung hinweisen könnte. Das wäre toll. Sehr geschätzt für alle Antworten.
Antworten:
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):
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:
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:
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/
quelle
Wie in der Physik. Nur in dem Moment, in dem Sie drücken
jump key
und der Charakter auf dem Boden ist, addieren Sie die Geschwindigkeit nach oben (dies wird als Impuls bezeichnet), aber lassen Sie den Charakter die ganze Zeit durch die Schwerkraft fallen.Wenn Sie nicht möchten, dass der Charakter jedes Mal springt, wenn er auf den Boden trifft - weil Sie gedrückt halten
jump key
-, fügenjump key is being pressed
Sie eine Variable hinzu , die Sie löschenjump key
, und setzen Sie sie anschließend. Pseudocode:Wenn ich Ihren Weg benutzt habe:
Wie sich
donkey.y
das ändern wird, liegt in Ihrer Vorstellungskraft. Die Geschwindigkeit sollte kleiner werden. Je höher der Esel in der Luft ist, desto besser sieht er aus.quelle