Fehler beim Rechnen (oder lieg ich da falsch?)

  • GM 7
  • Fehler beim Rechnen (oder lieg ich da falsch?)

    Hallo Community,
    seit langem melde ich mich wieder und gleich mit einem Problem.

    Ich habe eine Variable tempspeed = 0.
    Zu dieser Variable addiere ich (wenn ich D drücke) 0.2.
    Wenn ich dann kein D drücke subtrahiere ich 0.2, wenn tempspeed > 0.
    Nach meiner Meinung müsste es dann genau bei 0 stoppen.
    Nur leider ist das nicht so.
    Er stoppt aus ausergewöhnlichem Grunde bei -0.2

    Als Code geschrieben sieht das so aus:

    GML-Quellcode

    1. if (keyboard_check(ord("D")) and tempspeed < n_sp) { tempspeed += 0.2; }
    2. if (!keyboard_check(ord("D"))) { if (tempspeed > 0) { tempspeed -= 0.2; } }


    Ich würde mich über eine schnelle Antwort freuen.

    mfg. Tobi97.

    edit: n_sp kann man durch 2 ersetzen.
    8|

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

  • Er stoppt aber bei -0.2, ich habe es gerade selbst getestet.
    Wirklich ein ungewöhnliches Verhalten, ich kann es nur damit erklären, dass der GM keine Integer sondern Floats benutzt, versuch mal das:

    GML-Quellcode

    1. draw_text(8,8,string_format(tempspeed,32,32));
    Du wirst sehen, dass die Werte nie exakt den gewünschten Wert erreichen.

    Also würde ich vorschlagen, du benutzt sowas in der Art:

    GML-Quellcode

    1. tempspeed = max(0,min(n_sp,tempspeed+keyboard_check(ord("D"))*0.4-0.2));

    Und falls dir das zu kompliziert sein sollte :P

    GML-Quellcode

    1. if (keyboard_check(ord("D"))) { tempspeed = min(n_sp,tempspeed+0.2); }
    2. else { tempspeed = max(0,tempspeed-0.2); }
  • Benutzer online 1

    1 Besucher