Zeit verzerren

  • Allgemein

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

  • Zeit verzerren

    Hallo,

    wie die Überschrift bereits verrät möchte ich etwas mit der Zeit spielen. Dabei möchte ich nicht einfach die Raum-Geschwindigkeit ändern, sondern Objekte unabhängig voneinander beeinflussen - doch da stoße ich an meine Grenzen.
    Ich habe zunächst eine Testumgebung mit einem Objekt erstellt, dass nur springen kann (kleine Schritte zum Erfolg ;) ). Es besitzt eine Schwerkraft-, eine Sprunggeschwindigkeit- und eine Verzerrung-Variable. Nun habe ich die Variablen, Schwerkraft und Sprunggeschwindigkeit, mit der Verzerrung-Variable multipliziert um meine Zeit-Verzerrung zu erreichen, doch das funktioniert nicht ganz. Die Sprunghöhe verändert sich, sobalt die Verzerrung-Variable verändert wird.
    Ich habe bereits versucht die Verzerrung-Variable zu quadrieren, durch eins zu teilen und/oder die Wurzel zu ziehen um den Fehler zu beheben.
    Der bisher beste Ansatz war dieser:
    Spoiler anzeigen

    GML-Quellcode

    1. /*
    2. bJmp = Boolean Jump
    3. bGrav = Boolean Gravity
    4. ResVSpd = Resulting Vertical Speed
    5. warp = Verzerrung
    6. */
    7. // |--- Input ---|
    8. if(keyboard_check(vk_up) && !place_free(x, y+1)){
    9. bJmp = true;
    10. }else{
    11. bJmp = false;
    12. }
    13. // |--- Physics ---|
    14. if(place_free(x, y+ResVSpd+1)){
    15. bGrav = true;
    16. }else{
    17. move_contact_solid(270, ResVSpd);
    18. bGrav = false;
    19. }
    20. // |--- Resulting ---|
    21. if(bGrav){
    22. ResVSpd = (ResVSpd + Gravity * sqr(warp));
    23. }else{
    24. ResVSpd = 0;
    25. if(bJmp){
    26. ResVSpd -= JumpSpd * warp;
    27. }
    28. }
    29. vspeed = ResVSpd;
    Alles anzeigen

    Doch vor allem dann, wenn ich mit der Verzerrungs-Variable über den Normalwert gehe, entstehen lästige Abweichungen in der Sprunghöhe.
    Meine Verzerrungs-Variable "warp" besitzt zu Anfang den Wert 1.

    Wie kann ich nun die Zeit langsamer/schneller ablaufen lassen, ohne die Sprunghöhe dabei zu verändern?


    Freue mich schon über Tipps und Antworten.



    -Skotchy
    "Ich sollte schlafen gehen"

    ~Pika-Pika~
  • Wie wäre es damit,...

    zu beginn deines Sprunges speicherst du dir den aktuelle Char.y wert in einer Variable und lässt den Spieler so lange hoch springen wie er drückt bzw. seine max sprunghöhe erreicht hat,.... damit sollte er immer die gewünschte höhe erreichen
    außer natürlich deine Sprunghöhe ist geschwindigkeitsabhängig, dann wirds bissle komplizierter,....


    Ich hoffe ich konnte dir einen Ansatz geben

    Grüßle Blayde
  • Blayde schrieb:

    Wie wäre es damit,...

    zu beginn deines Sprunges speicherst du dir den aktuelle Char.y wert in einer Variable und lässt den Spieler so lange hoch springen wie er drückt bzw. seine max sprunghöhe erreicht hat,.... damit sollte er immer die gewünschte höhe erreichen

    Damit hätte das Objekt jedoch eine konstante Geschwindigkeit, wenn ich es richtig verstanden habe:

    GML-Quellcode

    1. if(y < tmp_y + Sprunghöhe){
    2. y -= 2;
    3. }

    Blayde schrieb:

    außer natürlich deine Sprunghöhe ist geschwindigkeitsabhängig, dann wirds bissle komplizierter,....

    So ist es. Des Weiteren wird das Objekt noch von außen von verschiedenen Kräften/Geschwindigkeiten/Schüben beeinflusst.

    Wie bereits oben beschrieben dachte ich, dass ich nur einen einfachen Multiplikator benötige, um die Zeit nur für ausgewählte Objekte zu beeinflussen:

    GML-Quellcode

    1. Sprungkraft *= Verzerrung;
    2. Schwerkraft *= Verzerrung;

    Bei normaler Zeit-Geschwindigkeit heißt das "Sprungkraft|Schwerkraft * 1", bei halber "Sprungkraft|Schwerkraft * 0.5". Ich verstehe jedoch nicht, wieso dies nicht ganz funktioniert.

    Trotzdem danke ich dir für deine Hilfe und hoffe natürlich auf mehr.


    -Skotchy
    "Ich sollte schlafen gehen"

    ~Pika-Pika~