[SDL]FPS Bremse



  • Hey Leute,

    ich hab mir schon paar tutorials durchgelesen. Aber ich find ich war zu blöd um die zu verstehen. Deswegen wollt ich fragen ob mir das jemand echt für ganz blöde erklären kann ^^

    Ich hätte gerne ne Frame-Bremese damit meine SDL App nicht mit 100% läuft bzw. auf alten rechnern genauso schnell läuft.

    Danke schonmal falls sich jemand die zeit nimmt.
    gruß michi



  • Hallo

    http://www.codeworx.org/gamedev_tuts_framebremse.php
    Das ist ziemlich easy erklärt, solltest du hinbekommen.

    Mfg.
    way



  • hätte gerne ne Frame-Bremese damit meine SDL App nicht mit 100% läuft bzw. auf alten rechnern genauso schnell läuft.

    Man schreibt einen Gameloop, der unabhaengig von der Framerate ist.



  • immoment sieht meine App so aus.

    int main()
    {
    //Init
    //Variablen
    //Konstanten
    //...
    
    	while(!app_done)
    	{
    		while(!menue_done)
    		{//Menüschleife
    
    			while(SDL_PollEvent(&ev))
    			{//Tastenabfrage
    
    			}
            //Logik
            //Rendern
    		}
    
    		while(!game_done)
    		{//Spielschleife
    
    			while(SDL_PollEvent(&ev))
    			{//Tastenabfrage
    
    			}
            //Logik
            //Rendern
    		}
    	}
    
    	//DeInit
    }
    

    und ich weiß jetzt leider nicht wie ich die frames auf 30 FPS z.B begrenzen kann. hoffe mir kann jemand helfen



  • Hallo endless,

    es gibt von SDL eine Timer-Bibliothek die du hernehmen kannst:

    #include <SDL_timer.h>
    

    Ich find jetz momentan den Link nichmehr, den ich mal hatte, da war des schön erklärt mit ner eigenen Klasse, die das regelt ....

    Aber du kannst ja mal schaun unter SDL_timer

    Gruß Simon



  • Wie oft denn noch? Nicht nur das es drei Threads weiter unten schon beaentwortet ist, ist auch noch ein Crossposting aus wieviel Foren, bitte? f'`8k

    Autocogito

    Gruß, TGGC (Das kommt gut)



  • Ganz ohne "Bremse" trotzdem die richtige Geschwindigkeit durch Trennen des Zeichnens von der Logik. Die Variable delay sollte auf die gewünschte Logikrate gesetzt werden. Achtung: Bei sehr langsamer Logik oder sehr langsamen Zeichnen kann es zu Aussetzern, Ruckeln kommen oder gar das Bild einfrieren. Es wird bei langsamer Rechengeschwindigkeit nämlich einfach die Zeichenroutine übersprungen.

    int time = 0;
      bool done = false;
      int ticks;
      bool drawn = false;
      SDL_Event event;
    
      while(!done)
      {
        ticks = SDL_GetTicks();
    
        while(SDL_PollEvent(&event)) //Alle Events verarbeiten
        { /*...*/ }
    
        if(time < delay)  //Grafik
        {
          if(!drawn) //hier zeichnen, weil sich etwas verändert hat
          {
            /*...*/
            drawn = true;
          }
    
          else  //noch keine neue logik -> abwarten
          {
            SDL_Delay(delay - 3);
          }
        }
    
        else  //Spielelogik
        {
          /*...*/
          time -= delay;
          drawn = false;
        }
    
        time += SDL_GetTicks() - ticks;
      }
    

    Hoffe das hilft.
    geloescht


Anmelden zum Antworten