Image_angle soll direction 'ziehen'

  • GM 8

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

  • Image_angle soll direction 'ziehen'

    Vorweg:
    Überschrift ist wahrscheinlich blöd gewählt und obwohl ich glaube, dass es das schon x-mal gibt finde ich nichts :S .

    Zu meinem Vorhaben:
    Ich versuche vergebens meinem Objekt (ein Raumschiff) etwas mehr Physik beizubringen. Dabei soll es nicht in Richtung image_angle fliegen. Image_angle soll direction praktisch 'ziehen' (blöd erklärt?). Dazu lasse ich die Differenz zwischen image_angle und direction errechnen und teile das Ergebnis durch eine recht hohe Zahl (momentan durch room_speed). So wollte ich eine ziemlich weiche Kurve entstehen lassen.
    Dass hat auch mehr oder weniger geklappt aber trotzdem habe ich ein paar Probleme:
    1. Problem: Es lenkt oft ab 0/360 entweder gar nicht mehr oder in die falsche Richtung.
    2. Problem: Wenn ich während dem flug eine 180° Drehung mache und nach vorn beschleunige, behält es seine direction bei und fliegt nach hinten.

    Beim ersten Problem bin ich am verzweifeln, dass zweite müsste ich selbst lösen können.

    Der Code, der dafür verantwortlich sein müsste:

    GML-Quellcode

    1. if (abs(argument0.direction) < abs(argument0.image_angle))
    2. {argument0.dif = argument0.image_angle - argument0.direction; if (abs(argument0.dif) > 180){argument0.direction += (360 - argument0.dif)/room_speed;}else{argument0.direction += (argument0.image_angle - argument0.direction)/room_speed;}}
    3. if (abs(argument0.direction) > abs(argument0.image_angle))
    4. {argument0.dif = argument0.direction - argument0.image_angle; if (abs(argument0.dif) > 180){argument0.direction += (360 - argument0.dif)/room_speed;}else{argument0.direction += (argument0.direction - argument0.image_angle)/room_speed;}}
    5. return (argument0.direction);

    Das Ganze ist in einem Script und wird beim beschleunigen in motion_set als Richtung aufgerufen. 'div' wird mit 0 initialisiert. 'argument0' ist das Objekt, dass es aufruft.


    Ich weiß wirklich nicht mehr, wo ich nach dem Fehler suchen soll. Mit den Zeichen (+, -, *, /) habe ich schon herumgespielt. Ob 'abs' nötig ist oder nicht weiß ich nicht, ich hab es zur Sicherheit reingesteckt.

    So, ich hoffe, dass ihr wisst was ich meine und das diese Schreiberei nicht umsonst war.

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

    ~Pika-Pika~
  • Deinen Code kann man durch diesen ersetzen, was zusätzlich die Behebung aller Fehler mit sich Nachziehen sollte:

    GML-Quellcode

    1. var_diff = (argument0.image_angle - argument0.direction) mod 360;
    2. if (abs(var_diff) <= abs(var_diff - 360)) {
    3. argument0.direction += var_diff / var_speed;
    4. } else {
    5. argument0.direction += (var_diff - 360) / var_speed;
    6. }
    7. return argument0.direction;

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