Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

xxendlessxx

Treue Seele

  • »xxendlessxx« ist der Autor dieses Themas

Beiträge: 230

Wohnort: Bad Schussenried

Beruf: Full Stack Developer

  • Private Nachricht senden

1

19.03.2009, 13:30

[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

kiba

Alter Hase

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

2

19.03.2009, 14:05

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Timer(){
  private:
  double startTicks;

  public:
  Timer(){startTicks = 0;}
  void start(){startTicks = SDL_GetTicks();}
  double  getTicks(){return SDL_GetTicks() - startTicks;}
};

main(){
  //init SDL

  bool quit = false;
  Timer time;
  double framerate = 60.0f;
  while(!quit){
      //startet den Timer (erneut)

      time.startTicks();
 
      //Die schleife....

      while(time.getTicks() < 1000.0f/framerate){
          //Window handle

          while( SDL_PollEvent( &event ) ){
            if( event.type == SDL_QUIT ){
                quit = true;
            }
          }
      }
    //Bilder anzeigen,tasten abfragen......

   }
   SDL_Quit();
   return 0;
}


Die Schleife....
while(time.getTicks() < 1000.0f/framerate)
Behandelt die notwendigen Window Handle wie z.b. Das beenden des Fensters.
Damit man nicht warten müss bis die Schleife beendet wird, wird das in der Schleife gemacht.
Die Schleife wird so lange durch geführt bis....
time.getTicks()
Die aktuelle Zeit des Timers(in milisekunden).
kleiner ist als..
1000.0f/framerate
1000 Milisekunden / Bild pro Sekunde,(1 Frame).

Das heißt die Schleife läuft die Zeit eines Frames durch und dann geht es zum Rendern(Bilder anzeigen).
Dann startet der Timer wieder von vorne und wartet wieder auf eine Frame.
So wird nur maximal jede 1/60 Sekunde gerendert.

VuuRWerK

Frischling

Beiträge: 59

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

3

19.03.2009, 14:06

Das simpleste wäre ein SDL_Delay(1); ans Ende der Schleife zu setzen, wird hier erklärt: Klick

Edit: kibas Vorschlag ist aber dem vorzuziehen!

Gut Schuß
VuuRWerK ;)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

19.03.2009, 14:20

Naja...eine Kombination von beidem ist am besten, denn kibas Lösung lässt die CPU gnadenlos kochen, während das Delay nur einmal kurz um die 1ms wartet. Wobei ich das ganze wohl ohne extra Klasse gemacht hätte :)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

VuuRWerK

Frischling

Beiträge: 59

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

5

19.03.2009, 14:26

Am besten wäre nur zu zeichnen wenn es was zu zeichnen gibt oder höchstens 60mal in der Sekunde. Mehr brauch man gar nicht, das menschl. Auge ist dazu eh viel zu lahm um da noch ein "flackern" mit zu bekommen :)

Gut Schuß
VuuRWerK ;)

6

19.03.2009, 15:45

Zitat von »"VuuRWerK"«

Am besten wäre nur zu zeichnen wenn es was zu zeichnen gibt oder höchstens 60mal in der Sekunde. Mehr brauch man gar nicht, das menschl. Auge ist dazu eh viel zu lahm um da noch ein "flackern" mit zu bekommen :)

Gut Schuß
VuuRWerK ;)

eher so, das man die bildschirmfrequenz trifft, was je nach einstellungen zwischen 50 und 75 Hz liegt, damit wird man nämlich durch aktive VSync nicht noch zusätzlich ausgebremst.

Werbeanzeige