Eine (glaub ich) simple Frage: Bremsweg berechnen

  • GM 8
  • Eine (glaub ich) simple Frage: Bremsweg berechnen

    Hi

    hab nur eine kleine mathematische Frage, ich berechne die Geschwindigkeit eines Objekts in meinem Spiel folgender maßen:

    move_speed += acceleration;
    move_speed = max(min(move_speed,max_speed,point_distance(x,y,xc_target,yc_target)/brake),0);

    Jetzt meine ganz simple frage: Wenn ich den Code im step event habe, wie kann ich dann den möglichst genauen Bremsweg berechnen?

    Die bewegung wird einfach abgebrochen wenn der Abstand zum Ziel kleiner als 1 ist.

    Kann mir da jemand helfen?
    Wäre sehr dankbar:) Glaube aber das es eine einfache Lösung gibt, nur die will mir nicht einfallen

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Bei nem Spiel von mir hab ich das so gemacht:

    GML-Quellcode

    1. if distance_to_point(go_x,go_y)<100
    2. {
    3. speed-=1
    4. }


    Wenn ich Dich richtig verstanden habe, könnte aber auch sowas in der art funktionieren:

    GML-Quellcode

    1. if distance_to_point(go_x,go_y)<100
    2. {
    3. if speed>0.1
    4. {
    5. speed-=speed/distance_to_point(go_x,go_y)
    6. }
    7. }


    lg
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Lol, wie kommts dass jemand diesen Tread noch ausgräbt?

    Leider hilft mir das nicht viel. Mein Problem war nicht das System an sich (das funktioniert nähmlich prima)
    sondern wie ich den Bremsweg berechne. Das heist ich benötige Quasi den Punkt bzw die Entfernung ab der begonnen wird zu bremsen.

    Aber nicht so wichtig, ich habs durch einen gedachten Näherungswert gemacht. Es wär aber trotzdem sehr nützlich :/

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • ICh weiß nicht inwiefern du noch ab einer Lösung interessiert bist, aber schau dir mal diesen Ausschnitt aus deinem Code an:

    GML-Quellcode

    1. point_distance(x,y,xc_target,yc_target)/brake


    Fällt dir etwas auf? Nicht? Denk mal genau nach. Wie lang ist der Bremsweg? Unendlich, genau. Die Geschwindigkeit wird zwar kleiner und kleiner, aber nie wirklich 0. Natürlich tut es das im GM, da wir dort auch nur einer begrenzte Anzahl an dezimalen haben.
    Einen genaue Lösung habe ich nun auch nicht, aber es müsste eigentlich nur die variable "break", die geschwindigkeit und eine Genauigkeit in die Rechnung mit eingehen.

    Ich denke mal so was wie

    MfG SDX
  • Danke, die genauigkeit ist 0.5 bzw ich überprüfe if !distance move = 0;
    Könntest du aber vlt. noch für einen fast 10 Klässler erklären was dieses umgekippte M bedeutet? xD
    Nein ernsthaft, das lernen wir wahrscheinlich erst dieses Jahr...
    Der GM besitzt diese Funktion sowieso nicht direkt soweit ich weis.

    Ich wär für eine Lösung immernoch sehr dankbar xD

    Mein Problem ist nähmlich folgendes. ich will aus der Ferne steuern wann das Objekt anhalten soll ohne die Zielkoordinaten neu zu setzen.
    ich ziehe dafür einfach einen bestimmten Wert direkt von der Distanz ab und teile zusammen durch brake (ich weis es sollte break heisen, aber das ist ja schon ein Wort im GM).
    Ich muss aber sehr genau bestimmen können wo das Ovbjekt dann am Schluss stehen bleibt und dazu brauch ich den Bremsweg.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)

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

  • das umgekippte M ist das Summensymbol:

    das was in der gleichen Höhe steht wie das E ist die Formel
    Darunter der Startwert. Darüber das Maximum.

    so als ob

    GML-Quellcode

    1. for(i=1; i<= genauigkeit; i+=1)
    2. {
    3. dein wert += speed/bremse
    4. }


    ich bin auch 10Klässer(bzw. war xD)
    hab das schon in der 9ten gelernt :)

    Es ist relativ schwer zu erklären


    MfG Rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • GML-Quellcode

    1. distance = 0;
    2. d_speed = speed;
    3. repeat (feinheit) {
    4. d_speed/=bremse;
    5. distance += d_speed;
    6. }


    Dabei wollt ich mal so richtig cool sein :(

    EDIT: Rodog: so nicht. Du musst schon delta-speed nehmen. Also, die Geschwindigkeit nach jeder Umdrehung verkleinern.

    SDX

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

  • SDX schrieb:

    EDIT: Rodog: so nicht. Du musst schon delta-speed nehmen. Also, die Geschwindigkeit nach jeder Umdrehung verkleinern.


    ohh, upps :)

    Naja Code falsch, aber die überlegung war zumindest richtig. xD

    MfG Rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • Danke :) Denke dass sollte funktionieren.

    Umh, irgendwie stimmt da was nicht. Brake ist bei mir auf 10 und ich berechne den Wert nach der Maximalgeschwindigkeit 6.
    Und raus kommt 0.67 mit deinem Code.

    Dies kann auf keinenfall stimmen denn das Objekt bewegt sich mindestens um 10 Pixel pixel wenn es beginnt langsamer zu werden. Meiin Schätzwert war ja auch bei 15.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • es hilft dir nicht unbeding 100% weiter aber da ich gerad Fahrschule mache hatte ich den Bremmsweg erst dran. Klar kannm an das nicht 1 zu1 hier umsetzten aber die Berechnung
    lautet in der Prüfung


    evtl hilft dir ja
    Meine Signatur hat kein Visum für das GM Forum erhalten.
  • SDX schrieb:

    Also, hier funktioniert alles prima.
    Und 0.67 sollte schon stimmen. Überlege mal: wenn du dich jeden step 10 pixel weiter bewegst, und diesen dann um den Faktor 6 jeden step teilst, kommst du wirklich nicht weit!

    MfG SDX

    Ja, aber mir fällt grad auf, glaub du hast meinen Code da oben falsch verstanden. Ich teile nähmlich nicht die gradweilige Geschwindigkeit durch brake sondern ich teile die Distanz zum Ziel durch brake und setze (falls der Wert nicht großer als die maximal erreichbare Geschwindigkeit ist) die gradweilige Geschwindigkeit auf diesen Wert.




    EDIT:

    Hab jetzt noch mal ne halbe Stunde versucht dies Schritt für Schritt zu lösen, dies ist dabei rausgekommen aber es gibt immer abweichungen um 1-3 Pixel zudem scheint es von dem Startwert 500 Abhängig zu sein. 501 gibt ein anderes Ergebniss obwohl es eigentlich nicht sein sollte.

    Ich kann mir dass nur so erklären dass es an den internen Rundungen liegt.

    Wer es schafft das beide Messages den selben Wert rausbringen ohne die praktische Berechnung zu verändern ist für mich der größte Mathematiker im Forum :P
    Dateien
    • Bremsweg.zip

      (9,58 kB, 127 mal heruntergeladen, zuletzt: )

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von DragonGamer ()

  • Ich habe mich mal wieder dazu hinreißen lassen was zu machen :)
    Man kann es natürlich mit einer Schleife lösen, aber einfacher geht es wenn man es direkt berechnet. Wie von x-sascha schon richtig bemerkt verhält sich der Bremsweg quadratisch zur Geschwindigkeit.
    Dateien
  • Bl@ckSp@rk schrieb:

    Ich habe mich mal wieder dazu hinreißen lassen was zu machen :)
    Man kann es natürlich mit einer Schleife lösen, aber einfacher geht es wenn man es direkt berechnet. Wie von x-sascha schon richtig bemerkt verhält sich der Bremsweg quadratisch zur Geschwindigkeit.


    Nochmal: Ich Teile NICHT die Geschwindigkeit durch brake sondern die Distanz!!!

    Ich danke dir für das example nur bringt mir das nichts da ich das System so nicht implementieren kann.
    Der Bremswert brake (10 in meinem Beispiel) muss bleiben :/





    Himmel, doch keine so einfache Frage wie im Titel erhofft...

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Oh, Sorry
    Ich hatte einfach angenommen es handelt sich um gleichmäßig beschleunigte Bewegung und habe mir dein example garnicht angeschaut. Was für eine seltsame Art des Abbremsens soll das eigentlich sein ^^

    Aber wie dem auch sei, ich hab im Grunde nicht viel an deinem example geändert. Es wird einfach das draw-Event des Objekts simuliert, bis es zum stehen kommt. Ist denke ich die einfachste Methode.
    Dateien
    • Bremsweg.rar

      (9,47 kB, 145 mal heruntergeladen, zuletzt: )
  • Mh, gibts denn keine mathematische Lösung?
    Ich kann wohl schwer im Spiel jede Einheit so simulieren...
    Da kann ich gleich alles per Hand mit dem Simulator berechnen da sich diei werte während des spiels im Grunde nicht verändern.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)