2016-03-25 8 views
0

Ich arbeite gerade an einem Remake von Super Mario World in C# mit ein paar Freunden für ein Schulprojekt.C# XNA 2D Platformer Jumping

Wir grob arbeiten konnten springen, zumindest es geht rauf und runter ... die Sache ist, na ja, für sich selbst sehen:

https://gyazo.com/f49886ea48a0653b801d6c0741709fea Hier ein animiertes gif des Problems ist.

Es steigert extrem schnell, fast sofort und gleitet dann langsam nach unten. Ich habe versucht, die Gravity- und Jumpboost-Werte zu ändern, aber obwohl ich das Gleiten teilweise repariert habe, teleportiere ich fast nach oben. Ich kann das Springen zu glätten scheinen ...

Hier ist die vollständige Spielerklasse: http://pastebin.com/bCjCB2q8

ich das Problem nicht finden können, vielleicht einer von euch mir helfen könnte, um zu sehen, wo ich schief gehen in meiner Art zu denken?

Antwort

1

Ich würde normalerweise grundlegende Newtonian Bewegung mit Beschleunigung und Geschwindigkeit (Vector2) implementieren.

für jedes Update beginnen Sie mit Acceleration = Vecotr2.Down * Gravity; und Sie enden mit Velocity + = Beschleunigung * gameTime; Position + = Geschwindigkeit * gameTime;

gameTime = Gesamtzahl der Sekunden seit dem letzten Update. Dies ist wichtig, damit Zahlen für Beschleunigung und Geschwindigkeit in einem konsistenten Rahmen bleiben, der für Menschen sinnvoll ist. Grundlegend Beschleunigung ist Änderung der Geschwindigkeit pro Sekunde, während Geschwindigkeit ist Änderung der Position pro Sekunde.

Um zu springen, setzen Sie Acceleration.Y = JumpSpeed ​​/ gameTime; // JumpSpeed ​​= gewünschte Aufwärtsgeschwindigkeit. Das/gameTime nullt das * gameTime bei der Berechnung der Geschwindigkeit aus.

Angst, diese Antwort könnte ein bisschen dünn sein. Ich kann schmücken, wenn ich von der Arbeit nach Hause komme ... :)

+0

Vielen Dank für Ihre Antwort! Ich werde sehen, was ich mit dieser Information machen kann, danke noch einmal! Ich werde euch auf dem Laufenden halten :) EDIT: Was meinst du mit 'Acceleration = Vector2.Down * Gravity'? Was ist Vector2.Down? –

+0

Es tut uns leid, Vector2 und Vector3 zu mischen: P könnte auch einfach Acceleration = new Vector2 (0f, Gravity); –