Physik - Ball-Flugweite berechnen?

  • Physik - Ball-Flugweite berechnen?

    Hey zusammen,

    ein paar wissen vielleicht, dass ich aktuell ein kleines Soccer-Game programmiere. Mein letzter Thread handelte von meinem Problem mit der 3D-Darstellung, das ich inzwischen gut hinbekommen habe (inkl. Kollisionen etc, falls dieses Wissen jemand benötigt, helfe ich gern weiter). Jetzt geht es darum, dass die Spieler in die Richtung des Balls laufen, bzw. da wo sie den Ball zum frühest möglichen Zeitpunkt erreichen können (bei hohen Flugkurven wäre das ca. der Punkt, an dem der Ball auf dem Boden aufprallt, bei niedrigen wo sich der Laufweg des Spielers mit der Laufbahn des Balls zuerst kreuzen). Ich nutze nicht die Physik-Engine, sondern nur die Variablen vspeed/hspeed, friction und gravity, um den Ball von A nach B zu bewegen. Doch habe ich nicht wirklich eine Ahnung, wie ich diese Koordinaten, an dem sich Spieler und Ball zuerst treffen können, berechnen kann. Der Spieler ist noch nicht mal das Problem, aber falls der Ball mit einem vspeed (also Höhe in dem Fall) von 5 und hspeed (also Länge des Platzes) von 5 gestartet wird und eine Gravitation von 0,22 herrscht, habe ich keine Ahnung, wie ich nun die zurückgelegte Distanz des Balls (bis zum ersten Aufprall) berechnen kann. Vielleicht hat da jemand einen Tipp, sonst hilft auch Engine-internes Wissen, wie diese Werte genau funktionieren (bedeutet der Wert "5", dass der Ball 5 Koordinaten Punkte pro Frame zurücklegt?). Danke.
  • Zwecks lösungsorientiertheit möchte ich dich darauf hinweisen, dass das mit meiner Lösung die ich dir angeboten habe kein Problem wäre, da du mit den lengthdir funktionen diese Punkte die du berechnen willst, wunderbar extrapolieren kannst.

    Ein hspeed von 5 bedeutet, dass die Instanz jeden Step 5 pixel verschoben wird. Mit hspeed und vspeed hast du übrigens auch das Problem, dass sich der Ball diagonal schneller fortbewegt(ca 7px) als horizontal bzw vertical, mit lengthdir ist die Richtung egal, der Ball bewegt sich immer 5 pixel.

    Du kannst die Aufschlagskoordinate berechnen in dem du schaust, wie lange der Ball zum Boden braucht.

    GML-Quellcode

    1. if vspeed > 0 //ball fällt wieder nach unten
    2. {
    3. var fallspeed = vspeed; //fallspeed als zwischenspeicher, damit die Flugbahn nicht angerührt wird
    4. var distanceToGround = 0;
    5. while(fallspeed > 0)
    6. {
    7. distanceToGround += fallspeed +gravity;
    8. fallspeed -= gravity;//danke Husi
    9. }
    10. }

    so jetzt sind es zB 16px bis zum Boden, jetzt können wir die Fluggeschwindigkeit mal 16 nehmen um den voraussichtlichen aufschlagspunkt zu erhalten.

    GML-Quellcode

    1. draw_sprite(spr_aufschlagspunkt,0,hspeed*distanceToGround,y);//muss angepasst werden, je nachdem wie du bis jetzt denn Ball drawest

    spr_aufschlagspunkt musst dann natürlich auf den Boden gedrawed werden und nicht auf derHöhe des Balls und momentan berechnet sich der Punkt auch nur wenn der Ball wieder herunter fliegt. Wenn du mir deine Methode zeigst, dann kann ich besser darauf eingehen, aber vielleicht hilft dir das auch schon weiter.

    out now: KNOSSOS auf itch.io
    ancient-pixel.com <<< ich freue mich über einen Besuch! ^^

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Aku_Ryou ()