Friction berechnen

  • Allgemein

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Friction berechnen

    Hallo liebe gm-d.de-Community :)!

    Nach einiger Zeit wage ich mich jetzt wieder an ein größeres Projekt, das ich mit GameMaker:Studio verwirklichen will.
    Nun habe ich jedoch ein Problem, was ich mit diesem Thread zu lösen versuche! Und zwar:
    Ich habe ein Objekt (sagen wir X: 320, Y: 320), dass sich an einem Punkt in einem Raum befindet. Dieses Objekt soll sich direkt zu einem bestimmten Punkt bewegen (sagen wir X: 480, Y; 320). Um das Objekt direkt an diesen Punkt zu senden benutze ich:

    GML-Quellcode

    1. move_towards_point(480, 320, 8);

    Das funktioniert natürlich auch, jedoch möchte ich, dass das Objekt kurz bevor es das Ziel erreicht die Geschwindigkeit soweit senkt, bis es am Ziel die Geschwindigkeit 0 hat. Das versuche ich mit Friction zu machen, was ja auch kein Problem ist, jedoch möchte ich nun den Wert von Friction berechnen, damit das Objekt auch wirklich am Ziel zum stehen kommt. Mein Problem dabei ist folgendes:
    Ich habe ja die Anfangs-Koordinaten, die Ziel-Koordinaten und die Geschwindigkeit gegeben, nun brauche ich eine Formel womit ich den genauen Wert der Friction berechnen kann.
    Meine Frage: Wie berechne ich diese? Gibt es dazu eine Formel?
    Natürlich kann man das auch durch testen lösen, jedoch möchte ich, dass das für jeden Punkt im Raum möglich ist und nicht nur für einen.
    Ich habe vorher auch schon nach anderen Themen gesucht, sowohl als auf Englisch wie auch auf Deutsch. Fündig wurde ich hier, jedoch half mir das nicht wirklich weiter.

    Ich hoffe ihr könnt mir helfen mein Problem zu lösen!

    MfG und danke im Voraus,
    Clark.

    DigitalClark
  • Das ist auch eine interessante Methode, die Geschwindigkeit zu bestimmen :)! Danke :)!
    Jedoch meinte ich eigentlich eher die Bestimmung der Friction, also "Reibung". Aber wir kommen der Lösung immer näher ;)!
    Um euch das Problem visuell darzustellen, habe ich mir gedacht, bastel ich euch einfach mal zwei kleine GIFs 8)!

    Bei dieser Animation bewegt sich das schwarze Objekt ohne Reibung in die Richtung der Ziel-Koordinaten.
    Da das Objekt keine Reibung hat, hat es auch eine niedrigere Geschwindigkeit.


    Hier jedoch hat das schwarze Objekt Reibung und erreicht an der Ziel-Koordinate die Geschwindigkeit 0.
    Aufgrund der Reibung ist das Objekt jedoch am Anfang deutlich schneller als das Objekt der ersten Animation.

    Es ist in meinem Fall jedoch eigentlich egal, wie schnell das Objekt am Anfang ist. Die Hauptsache ist, das Objekt kommt trotz Reibung an der bestimmten Ziel-Koordinate ankommt :).
    Doch wie ihr sehen könnt, erreichen beide Quadrate zur gleichen Zeit den gleichen Punkt, jedoch verfügt das untere Quadrat über Reibung.
    Dies ist jedoch nur ein Fall, ich bräuchte eine Formel wie das Objekt jederzeit und an jedem Ort mit einer gewissen Reibung an der Ziel-Koordinate komplett an Geschwindigkeit verliert.
    Ich hoffe, ihr versteht was ich meine :)!

    Vielen Dank,
    MfG Clark.

    EDIT: Ich habe eine Korrekturen vorgenommen, um das Problem deutlicher zu machen :).

    DigitalClark

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von Clark ()

  • Afroman schrieb:

    nette Animationen

    Hahaha, vielen Dank Afroman ^-^! Ich finde die waren hier nötig, um das einfach besser visuell darzustellen :)!

    Auf diesen Script habe ich früher schon einmal flüchtig einen Blick erhaschen können, jedoch heute beim testen in GameMaker:Studio sowie in GameMaker 8.1 habe ich erkannt, dass dieser (auch der zweite) leider nicht der Skript ist, denn ich suche(, obwohl er äußerst nützlich sein kann :)).
    Das alles hat mich jetzt aber wieder ein Stück weitergebracht, danke nochmal an euch beide :)!

    Leider ist das Problem immer noch nicht gelöst...
    Ich habe eine Erweiterung mit dem Namen TweenGMS gefunden, die eigentlich genau das macht, was ich möchte (siehe Patroller in der Demo). Jedoch möchte ich keine Erweiterungen in mein Projekt einbinden...
    Aber alles in Einem ist das genau das was ich machen möchte, nämlich "tweening" bzw. "smooth easing".

    Vielleicht könnte man das Problem aber auch anders lösen :). Ich meine, anstatt den Wert der Reibung zu berechnen, könnte man ja die Pixel die zwischen der momentanen Position und der Ziel Position liegen als 100% nehmen, und je näher das Objekt an das Ziel herankommt, desto mehr sinkt die Geschwindigkeit in Prozent, d.h. dass das Objekt am Ende 0% Geschwindigkeit hat und sich trotzdem so "weich" bewegt... Das probiere ich gleich mal aus, jedoch bin ich mit Prozentzahlen im GameMaker nicht so vertraut. Hätte alternativ noch jemand von euch eine andere Idee :)?

    Vielen Dank,
    MfG Clark.

    EDIT: Ich habe mir noch einmal angeschaut was McGamemake für eine Idee hat und nach einigem ausprobieren scheint das sogar die Lösung sein, jedoch muss ich ein paar Werte anpassen und verwende jetzt nicht mehr

    GML-Quellcode

    1. move_towards_point(x,y,speed);
    sondern

    GML-Quellcode

    1. hspeed
    2. // Und
    3. vspeed
    Mal schauen, ob das klappt :)!

    EDIT 2: Ich habe es geschafft *-*! Danke nochmal an Afroman und McGamemake! Die Methode von McGamemake hat letzten Endes ohne Probleme funktioniert, nachdem ich mich damit noch ein wenig ausführlicher beschäftigt hatte :)!

    DigitalClark

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Clark ()