Delta Time verringert Geschwindigkeit wenn man Räume wechselt?

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

  • Delta Time verringert Geschwindigkeit wenn man Räume wechselt?

    Hi, ich mache gerade ein Spiel, welches auf deltatime statt auf FPS basieren soll.
    Ich habe 3 räume, (ein Menü und 2 Level). Alle Räume haben ein obj_control in ihnen (Code unten)
    Das erste Level läuft so wie ich will, und es verändert sich nichts wenn ich die FPS des Raums umstelle (bis auf unter 30 FPS, dann fängt es natürlich an zu stocken).
    Im zweiten Level sind dann die Sprunghöhe und Bewegungsgeschwindigkeit stark reduziert, der Raum hat aber immer noch 60 FPS (mit Fraps gemessen). Dasselbe passiert, wenn ich in raum 1 room_restart(); einsetze.
    Wenn ich im Menü die FPS des Raums höher als 30 setze, bewegt sich der Charakter in raum 1 zu schnell und springt zu hoch, wenn ich die FPS im Menü auf unter 30 setze, wird der Player ähnlich wie in level 2 gebremst.
    Was könnte ich da falsch gemacht haben?

    Create des obj_control

    Quellcode

    1. ​///Code that is run every room
    2. //pixel art
    3. texture_set_interpolation(false);
    4. //delta_time implemetation
    5. globalvar delta;
    6. delta = 1; //initialize delta


    Step des obj_control

    Quellcode

    1. ​///Esc to quit game
    2. var esc = keyboard_check_pressed(vk_escape);
    3. var restart = keyboard_check_pressed(vk_enter) || keyboard_check_pressed(ord("r"));
    4. //Quit the game
    5. if(esc)
    6. {
    7. game_end();
    8. }
    9. if(restart) {
    10. room_restart();
    11. }
    Alles anzeigen


    Begin Step des obj_control (für die deltatime)

    Quellcode

    1. ​delta = 60/1000000*delta_time;


    Hier nochmal der Code von meinem Player, da werden die Variablen ja auch mit deltatime multipliziert.
    Create:

    Quellcode

    1. ​///Initialize variables
    2. grav = 1*global.delta;
    3. spd = 2*global.delta;
    4. jspd = 8*global.delta;
    5. hspd = 0*global.delta;
    6. vspd = 0*global.delta;
    7. image_speed = 0;
    8. state = states.normal;

    Step: (hier wird zwischen scripts von mir gewechselt, in denen kommt delta time aber glaube ich nicht mehr vor.)

    Quellcode

    1. ​///State switching
    2. switch(state) {
    3. case states.normal: scr_player_normal(); break;
    4. case states.falling: scr_player_falling(); break;
    5. case states.landed: scr_player_landed(); break;
    6. }
    5-min-pixel "art" um 0 Uhr als Accountbild :sleeping: -_-
  • TrunX schrieb:

    Wenn du delta im Createevent verwendest wird ja nur der aller erste Frame als Referenz genommen, delta schwangt aber jeden Frame.
    Also musst du bei Bewegungen im Stepevent mit delta multiplizieren.

    Also müsste ich in meinen Scripts den folgenden Teil immer oben einbauen?

    Quellcode

    1. grav = 1*global.delta;
    2. spd = 2*global.delta;
    3. jspd = 8*global.delta;
    4. hspd = 0*global.delta;
    5. vspd = 0*global.delta;


    Oder wie ist das gemeint?
    Wenn ich den Code oben in die Scripts einbaue, wird der Player sehr langsam und die Sprünge werden kurz nach beginn "wieder abgebrochen"..
    5-min-pixel "art" um 0 Uhr als Accountbild :sleeping: -_-
  • TrunX schrieb:

    Eventuell weil du mit deinem zitierten code hspd und vspd resetest?

    Jo, das schien das Problem gewesen zu sein, jetzt läuft alles so wie es soll ^^
    Auch die FPS des Menüs sind jetzt egal und beim levelwechsel bleiben die Geschwindigkeiten gleich.
    Danke für die Hilfe :)
    5-min-pixel "art" um 0 Uhr als Accountbild :sleeping: -_-