Weiche Lenkung

  • GM 8
  • Weiche Lenkung

    Hallo,
    ich habe ein kleines Problem mit der Lenkung eines Objekts. Mein Ziel ist es, dass es weich lenkt, also langsam anfängt und aufhört. So sieht der Teil mit der Lenkung momentan bei mir aus.

    GML-Quellcode

    1. if (keyboard_check(ord('A'))){rotation += 0.2;if rotation > 4 then rotation = 4;direction += rotation;}
    2. if (keyboard_check(ord('D'))){rotation -= 0.2;if rotation < -4 then rotation = -4;direction += rotation;}
    3. if (rotation < 0){rotation += 0.1;direction -= rotation;}
    4. if (rotation > 0){rotation -= 0.1;direction += rotation;}

    Wenn ich damit nach rechts lenke, dann beschreibt das Objekt eine ganz leichte Kurve. Wenn ich die Taste dann auch noch loslasse, schwenkt es nach links aus, als wenn ich nach links gedrückt hätte.
    Nach links lenken funktioniert mehr oder weniger gut. Da ist die Kurve nur ziemlich scharf.

    Ich hoffe ihr könnt mir helfen.

    Grüße, Skotchy
    "Ich sollte schlafen gehen"

    ~Pika-Pika~
  • Wenn ich dein Code richtig verstanden habe, musst du nach dem Loslassen der Taste rotation wieder auf 0 setzen:


    GML-Quellcode

    1. if (keyboard_check(ord('A'))) {
    2. rotation += 0.2;
    3. if (rotation < 0) rotation += 0.1;
    4. if (rotation > 4) rotation = 4;
    5. direction += rotation;
    6. }
    7. if (keyboard_check(ord('D'))) {
    8. rotation -= 0.2;
    9. if (rotation > 0) rotation -= 0.1;
    10. if (rotation < -4) rotation = -4;
    11. direction += rotation;
    12. }
    13. if (keyboard_check_released(ord('A')) || keyboard_check_released(ord('D'))) rotation = 0;
    Alles anzeigen
  • Danke für die Antwort,
    ich möchte es so ähnlich haben. Am ende soll rotation weich bzw träge auf 0 gesetzt werden. Aber immerhin funktioniert jetzt das Lenken nach rechts.

    Grüße, Skotchy
    "Ich sollte schlafen gehen"

    ~Pika-Pika~
  • 1. Edit: Habe einen kleinen Tippfehler behoben.
    2. Edit: Ich las deine Problemstellung nochmals durch und korrigierte einen Denkfehler meinerseits.
    3. Edit: Ich habe dir versucht einen verständlicheren Code zu schreiben.
    4. Edit: Inkorrekten Code in diesem Beitrag entfernt. (Siehe unten.)

    Dieser Beitrag wurde bereits 13 mal editiert, zuletzt von cafaxo ()

  • Macht der Code nicht dasselbe wie der davor? Bei dem bleibt das Objekt auch sofort stehen wenn ich die Taste loslasse. Es sollte so ein ähnlicher Effekt entstehen wie bei einer Rennsimulation. Wenn man da lenkt, braucht das Auto am ende etwas Zeit, um wieder perfekt geradeaus zu fahren. Und das möchte ich auf mein Objekt übertragen.

    Aber weiterhin danke für die Hilfe.

    Edit: Beim aktuellen Code dreht sich das Objekt die ganze Zeit, es soll aber aufhören zu lenken bzw sich zu drehen :wacko: .

    Grüße, Skotchy
    "Ich sollte schlafen gehen"

    ~Pika-Pika~
  • Leider spielt das Lenken jetzt ganz verrückt. Nach links lenken funktioniert nicht, bevor man nach rechts gelenkt hat aber wenn man nach rechts lenkt, schwenkt es ziemlich schnell nach links aus. Außerdem wird nach links lenken zu rechts.
    Irgendwie ist das komplizierter als ich dachte :S .

    Edit: Mit dem aktuellen Code habe ich auch so meine Probleme.

    Aber danke für deine Bemühungen.

    Grüße, Skotchy
    "Ich sollte schlafen gehen"

    ~Pika-Pika~

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

  • Ich habe diesen Code anhand deines ersten Beitrags in diesem Thema verfasst, aber wenn auch dieser nicht zu einem zufriedenstellenden Verhalten führt, bitte ich dich jenes nochmals genauer zu erläutern.

    Spoiler anzeigen

    GML-Quellcode

    1. steering = false;
    2. if (keyboard_check(ord('A'))) {
    3. steering = true;
    4. rotation += 0.2;
    5. if (rotation > 4) rotation = 4;
    6. }
    7. if (keyboard_check(ord('D'))) {
    8. steering = true;
    9. rotation -= 0.2;
    10. if (rotation < -4) rotation = -4;
    11. }
    12. if (!steering) {
    13. if (rotation > 0) rotation -= 0.1;
    14. if (rotation < 0) rotation += 0.1;
    15. }
    16. direction += rotation;
    Alles anzeigen

    PS: Eigentlich will ich dir hier nicht ausschließlich den Code „vorkauen”, was ja eigentlich ziemlich kontraproduktiv dem Lerneffekt wirken sollte. Deshalb werde ich, sollten noch konkrete Fragen zum Code auftreten, diese auch nach Möglichkeit detaillierter beantworten.

    Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von cafaxo ()

  • Das ist nicht ganz was ich wollte aber ich habe das Problem eben lösen können. Ich habe blöderweise ein Rechenzeichen vertauscht. So sieht der Code jetzt aus:

    GML-Quellcode

    1. if (keyboard_check(ord('A'))){rotation += 0.2;if rotation > 4 then rotation = 4;direction += rotation;}
    2. if (keyboard_check(ord('D'))){rotation -= 0.2;if rotation < -4 then rotation = -4;direction += rotation;}
    3. if (rotation < 0){rotation += 0.1;direction += rotation;}
    4. if (rotation > 0){rotation -= 0.1;direction += rotation;}

    Das '-' in der dritten Zeile musste einfach nur ein '+' sein.
    Übrigens hat mich dein Code auf eine etwas andere Idee gebracht, danke dafür 8) .

    Und auch sonst danke für deine Bemühungen :thumbsup: .

    Grüße, Skotchy
    "Ich sollte schlafen gehen"

    ~Pika-Pika~
  • Benutzer online 1

    1 Besucher