Ablaufsteuerung in Spielen und anderen Echtzeitanwendungen



  • Guten Tag,

    wie mache ich eine Ablaufsteuerung die lastunabhängig ist?

    In meinem Spiel verwende ich zurzeit folgendes:

    frame_length = 1000/FPS; //Laenge eines Frames in ms
    
    while(game_running)
    	{
    		int begin_tick = SDL_GetTicks();
    
    		nextFrame(frame_length); //Der Parameter gibt die zu berechnende Zeit an
    		renderFrame();
    
    		int end_tick = SDL_GetTicks();
    
    		if(int delay = (frame_length - end_tick + begin_tick) > 0)
    			SDL_Delay(delay);
    	}
    

    Das Problem ist, dass das Spiel unsynchron mit der realen Zeit wird sobald die zur Berechnung benötigte Zeit länger ist als frame_length und ist somit lastabhängig. Wie bekomme ich das lastunabhängig hin? Bzw wie mache ich das so wie es in den meißten Spielen üblich ist, dass die FPS steigen (bis zu einem Maximum) wenn die Last sinkt?

    mfG
    Machtl


  • Mod

    Machtl schrieb:

    Das Problem ist, dass das Spiel unsynchron mit der realen Zeit wird sobald die zur Berechnung benötigte Zeit länger ist als frame_length und ist somit lastabhängig. Wie bekomme ich das lastunabhängig hin? Bzw wie mache ich das so wie es in den meißten Spielen üblich ist, dass die FPS steigen (bis zu einem Maximum) wenn die Last sinkt?

    wenn die frametime variabel ist, dann musst du sie messen und an deine update funktion uebergeben, falls du das so behalten willst.
    ansonsten such hier nach "logictick", da findest du dann einige threads wo andere dasselbe problem loesen wollten, vielleicht hilft dir das schon.


Anmelden zum Antworten