Ergebnis 1 bis 11 von 11

Thema: [Hilfe] Sprungmechanik mit fixer Höhe

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Zitat Zitat von Owly Beitrag anzeigen
    Das ist einleuchtend, danke. Jetzt bin ich aber auf mein Hauptproblem zurückgeworfen: Was, wenn ich eine beliebige Maximalhöhe y erreichen will? Dann reicht es nicht aus, wenn sich in jedem Additionsschritt v um g verkleinert, weil y erreicht wird, lange bevor v gegen 0 tendiert.
    Doch, das sollte eigentlich schon passen, denn g ist (zumindest real) für alle Sprünge gleich, egal wie hoch. Aber wenn du eine zu erreichende Sprunghöhe y (bzw. h_max) vorgibst, ändert sich die nötige Anfangsgeschwindigkeit

    y = (v^2)/(2g) => v = sqrt(2g*y) [sqrt = Quadratwurzel]

    Kann erst später ausführlicher werden, aber nur soviel schon mal noch zur Klärung: Ich sehe bei dir noch den Denkfehler, dass du g, y und die Dauer des Sprunges vorgeben willst. Es reichen aber schon 2 Werte vollkommen aus (z.B. Sprunghöhe und Sprungdauer). g und v ergeben sich dann daraus.
    Das g verwendest du dann auch für alle anderen Sprunghöhen und passt nur noch v an. Die Sprungzeit ergibt sich dabei dann von allein.



    Die Additionsschritte für jeden Sprung berechnest du dann wie oben beschrieben:
    Startwert: v - g/2
    jeder weitere Schritt: v = v - g


    Die durchzuführenden Schritte im bzw. vor dem Spiel dürften dann etwa so aussehen:
    Vorbereitung/Planung
    0.(da vor dem Spiel) Durch einen Referenzsprung (gewünschte Höhe y und Dauer t) den Wert für g festlegen => g = 2y/(t^2)

    Der eigentliche Sprung
    1.) Bei einem Sprung im Spiel aus der (bereits zu Beginn feststehenden?) Sprunghöhe y die Anfangsgeschwindigkeit v ermitteln => v = sqrt(2g*y)
    2.) Durchführung des Sprunges durch Berechnung der Additionsschritte für den Höhenzuwachs, beginnend mit v = v - g/2, danach immer v = v - g
    und zwischendurch jedes Mal die neue Höhe durch y = y + v berechnen.
    3.) Solange wiederholen, bis die Figur wieder festen Boden erreicht hat.

    Geändert von Ark_X (29.01.2016 um 18:32 Uhr)

  2. #2
    Zitat Zitat von Ark_X
    Ich sehe bei dir noch den Denkfehler, dass du g, y und die Dauer des Sprunges vorgeben willst. Es reichen aber schon 2 Werte vollkommen aus (z.B. Sprunghöhe und Sprungdauer).
    Stimmt, deshalb hat mein Gehirn blockiert, wenn ich mir die Lösung bildhaft vorstellen wollte.
    Mit der Berechnung von g und v aus y und t funktioniert die Mechanik perfekt. Ganz großen Dank dafür. Sie funktioniert so perfekt, dass ich mich frage, warum ich noch keinen Code gesehen habe, der das genauso handhabt. Damit hat man als Entwickler nämlich viel mehr Kontrolle, statt v und g vorzugeben und y daraus abzuleiten.

  3. #3
    Schön, wenn ich helfen konnte! Klappt es auch wirklich mit der unterschiedlichen Sprunghöhe? Denn nach meiner Vorstellung setzen die von mir beschriebenen Formeln voraus, dass die Endhöhe im Moment des Absprungs bekannt ist (also quasi sofort, wenn man den Sprungknopf drückt), doch bei Mario & Co. richtet es sich ja danach, wie lange man den Sprungknopf gedrückt hält. Für diese Phase müsste man dann eigentlich "blind" eine Steiggeschwindigkeit vorgeben und diese anpassen, sobald der Knopf losgelassen wurde und endlich sicher ist, welche Höhe erreicht werden soll.
    Aber falls das kein Problem ist, umso besser!

  4. #4
    Man könnte es doch einfach so machen, das der Sprung mit einer festen Geschwindigkeit beginnt und diese Geschwindigkeit so lange beibehalten wird, bis der Knopf losgelassen wird bzw. bis eine bestimmte maximale Höhe erreicht wurde (man soll ja nicht ewig hoch springen können).
    Und erst ab dem Punkt setzt die Formel oben ein mit 48 Pixeln (oder was es dann sein sollen) und einer Geringer werdenden Geschwindigkeit.
    Die Startgeschwindigkeit kann man ja auch in Abhängigkeit mit den Parametern aus der Formel oben setzen.

  5. #5
    Zitat Zitat von Ark_X
    Aber falls das kein Problem ist, umso besser!
    Nein, die Sprunghöhe ist fix, das passt also, wie es ist. Ich sitze an einem Beat'em Up und da ist es normal, keine variable Höhe zu haben.
    Mario ist ein Sonderfall, den ich mir bei Gelegenheit mal vorknöpfen werde. Ich habe schon viele Engines gesehen, die behaupten, Super Mario World abzubilden und keine tut es tatsächlich.

    @Eddy: Wenn ich deinen Ansatz richtig verstehe, würde ich den auch verfolgen. Marios potenzielle Sprunghöhe ist gestaffelt und je nachdem, wie lange man den Knopf gedrückt hält, müsste eine andere Maximalhöhe vorgegeben sein, die in Abhängigkeit zur schon erreichten Höhe stünde.

    Edit:
    Hm, nee, die Sprunghöhe in SMW ist doch ganz variabel, ist nur an der Spitze exakt vier Tiles (16x16) hoch.

    Geändert von Owly (31.01.2016 um 18:17 Uhr)

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •