Haben Sie schon einmal die alten Game & Watch-Spiele gesehen, bei denen sich die Charaktere entweder am Boden oder in der Luft befanden, ohne einen Übergang dazwischen? Das kann ein cooler Effekt sein, wenn er an der richtigen Stelle eingesetzt wird, aber in den meisten Spielen wirkt er steif und ruckartig. In diesem Schnelltipp zeige ich Ihnen den Unterschied zwischen dem Game & Watch-Ansatz und einem realistischeren (aber dennoch einfachen) Ansatz, bei dem Sprunggeschwindigkeit und Schwerkraft verwendet werden.
Hinweis: Obwohl dieses Tutorial mit JavaScript geschrieben wurde, sollten Sie in der Lage sein, in fast jeder Spieleentwicklungsumgebung dieselben Techniken und Konzepte zu verwenden. Vielen Dank auch an Kenney.nl für die tollen kostenlosen Plattform-Sprites!
Die naivste Art und Weise, wie man einen Charakter springt, besteht darin, die Charaktere zu setzen y
Position auf eine höhere Koordinate, lassen Sie es eine Sekunde und setzen Sie es dann auf den vorherigen Wert zurück.
Zum Beispiel:
var jumpSpeed = 1000; Funktion jump () Zeichen.y - = 25; setTimeout (function () character.y = characterGround; stage.update ();, jumpSpeed); function gameloop () // Wenn der Spieler W drückt: Aufruf der Sprungfunktion jump ();
Ich habe eine Demo erstellt, um diesen Ansatz zu demonstrieren. Verwenden Sie die W Taste, um das Zeichen zu springen, und den Code in jsFiddle anzeigen und ändern:
Das scheint ziemlich gut zu funktionieren. Wir können das ändern Sprunggeschwindigkeit
Variable, damit der Charakter schneller oder langsamer springt.
Wenn wir jedoch beschließen, unserem Charakter Bewegung hinzuzufügen, sehen wir, dass dies zu einem Problem wird. Siehe die Demo (Verwendung) W springen, EIN und D nach links und rechts bewegen und den Code in jsFiddle anzeigen und ändern):
Ich kenne jedenfalls niemanden, der so springt. Wir brauchen einen Weg, um unseren Charakter allmählich auf den Boden zurückfallen zu lassen. Mit dem Begriff der Schwerkraft können wir genau das erreichen. (Ein weiteres Problem ist, dass unser Charakter bereits in der Luft springen kann, also werden wir das auch beheben.)
Betrachten wir eine formale Definition der Schwerkraft (scrollen Sie zum Schwerkraftabschnitt der Erde herunter), können wir sehen, dass ein Objekt, das frei in der Nähe der Erdoberfläche fällt, seine Abwärtsgeschwindigkeit um 9,81 m / s (32,1740 ft / s) erhöht zweitens, dass es fällt.
All dies bedeutet, dass die Geschwindigkeit, mit der es fällt, mit der Zeit zunimmt. Mit anderen Worten, es beschleunigt sich zum Boden hin.
Um dies in einen funktionierenden Code umzuwandeln, müssen wir eine y-Velocity-Variable für unseren Charakter hinzufügen. Bei jedem Frame bewegt er sich um diese y-Geschwindigkeit nach unten. Wenn das Spiel zum ersten Mal beginnt, beträgt die Y-Geschwindigkeit des Charakters 0, da er sich am Boden befindet. Damit er springen kann, setzen wir seine y-Geschwindigkeit auf eine negative Zahl und treiben ihn in die Luft. In jedem Frame, in dem er sich in der Luft befindet, fügen wir einen festgelegten Wert hinzu (den wir anrufen) Schwere
) auf seine Geschwindigkeit und beschleunigte ihn im Laufe der Zeit auf den Boden zu.
Nachfolgend wird beschrieben, wie der Code funktionieren kann:
var yVel = 0; Var Schwerkraft = 1,2; var isJumping = false; Funktion jump () if (isJumping == false) yVel = -15; isJumping = true; function gameloop () if (isJumping) yVel + = Schwerkraft; zeichen.y + = yVel; if (character.y> characterGround) character.y = characterGround; yVel = 0; isJumping = false;
Wir haben zuerst gesetzt yVel
auf 0 setzen, a Schwere
Variable (die Sie ändern können, um den Charakter mit einer anderen Rate abwärts zu bringen), und setzen Sie ein springt
Variable, um zu definieren, ob er bereits springt.
Wenn der Benutzer versucht zu springen, während er sich bereits in der Luft befindet, passiert nichts; ansonsten setzen wir yVel
zu -fünfzehn
. (Ändern Sie diesen Wert, um den Anfangssprung höher oder niedriger zu machen.)
In der gameloop ()
, Wenn der Charakter springt, erhöhen wir die Schwerkraft yVel
Dies bedeutet, dass der Charakter bei jedem Tick der Spielschleife um einen bestimmten Betrag "fällt". Wenn er den Boden berührt, setzen wir uns springt
zurück zu falsch
so können wir ihn wieder springen lassen
Ich habe eine weitere Demo, die Sie ausprobieren, verzahnen und anpassen können. Versuchen Sie das zu ändern Schwere
und yVel
Werte auf jsFiddle, so können Sie wirklich ein Gefühl dafür bekommen, wie diese Technik funktioniert:
In diesem kurzen Tutorial haben Sie gelernt, wie Sie Ihren Charakter realistischer machen können, indem Sie etwas Schwerkraft einbauen. Ich hoffe, dass Sie dieses Tutorial als nützlich empfunden haben und vielen Dank für das Lesen!