Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 04, 2025 12:48

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: FPS begrenzen
BeitragVerfasst: Mi Aug 20, 2008 22:04 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

ich hab versucht die FPS in meinem Programm zu begrenzen, geht auch ganz gut
so wie ich das gelöst hab, aber sobald ich MaxFPS größer als 75 setze, dann hängt
sich das Prog beim Starten auf. Aber ich hab kein Plan, wo der Fehler ist!
Code:
  1. const
  2.   MaxFPS = 75;
  3.  
  4. var  
  5.   StartTime, TimeCount, FrameCount  : Cardinal; //FrameCounter
  6.   Frames, DrawTime, SleepTime       : Cardinal; //& Timebased Movement
  7.  
  8. procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
  9. begin
  10.   StartTime := GetTickCount;                 //StartZeit setzen
  11.   RenderBlendMap(Transparenz);               //BlendMap rendern
  12.   Render;                                    //Szene rendern
  13.   DrawTime := GetTickCount - StartTime;      //Zeit die zum Zeichnen benötigt wird berechnen
  14.   if MaxFPS > 0 then SleepTime := round(1000/MaxFPS)-DrawTime else SleepTime := 0; //SleepTime ermitteln
  15.   Sleep(SleepTime);                          //Pause
  16.   DrawTime := DrawTime+SleepTime;            //Delta Time brechnen
  17.   Inc(TimeCount, DrawTime);                  //TimeCount erhöhen
  18.   Inc(FrameCount);                           //FrameCount erhöhen
  19.  
  20.   if TimeCount >= 1000 then                  //wenn mehr als eine Sekunde um, dann:
  21.     begin
  22.       Frames := FrameCount;
  23.       TimeCount := TimeCount - 1000;
  24.       FrameCount := 0;
  25.       Caption := IntToStr(Frames)+' FPS';
  26.     end;
  27.  
  28.   Done := False;
  29. end;


Was mach ich falsch?

MfG Bergmann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 21, 2008 11:07 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Habs jetzt so gemacht:

MaxFPS in eine Variable.
OnFormCreate: MaxFPS := 0;
Alles laden
OnFormShow: MaxFPS := 50;

und so gehts bis jetzt. ma gucken ob sich noch was ergibt,
oder ob ich das jetzt anhacken kann...

MfG Bergmann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 24, 2008 02:15 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

geht immer noch nich...
Das Programm startet zwar jetzt, ohne sich aufzuhängen, aber dafür bleibt es dann immer mittendrin hängen. Wenn ich das Prog einfach laufen lass, dann is nich erkennbar, das es nach einer bestimmten Aktion hängen bleibt: Es ist immer unterschiedlich. Wenn ich den Frame-Limiter aber ganz raus nehm, dann läuft es 1a, also muss es ja daran liegen. Kann mir da jmd helfen?

MfG Bergmann

p.s.: tolles Selbstgespräch xD


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 31, 2008 02:36 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Moin,

hat keiner na Ahnung?! Wie macht ihr das bei euren Programmen? Liegt es vlt. am Sleep? Oder sollte ich einfach nur einen Timer nehmen?

MfG Bergmann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 31, 2008 08:43 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich würde kein Sleep(0); benutzen, pack sleep in das if rein.
Code:
  1. if MaxFPS > 0 then
  2. begin
  3.   SleepTime := round(1000/MaxFPS)-DrawTime;
  4.   Sleep(SleepTime);
  5. end
  6. else
  7.    SleepTime := 0; //SleepTime ermitteln //Pause


Das ist um einiges sicherer, denn meines Wissens sind negative werte,0 und infinity absolut tötlich für sleep und machen sonnst auch keinen Sinn.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 31, 2008 10:05 
Offline
DGL Member

Registriert: Do Jun 28, 2007 17:58
Beiträge: 193
Programmiersprache: Pascal, C
Schau mal hier:
http://andorra.cvs.sourceforge.net/ando ... iew=markup

Dort habe ich auch eine Funktion zu limitieren der FPS geschrieben (TAdPerformanceCounter.LimitFrameRate). Der Parameter "atd" ist die Zeitdifferenz seit dem letzten Aufruf.

_________________
http://audorra.sourceforge.net//http://andorra.sourceforge.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 31, 2008 22:28 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

ganz kurrios, hab jetzt ne lösung gefunden, aber:
so gehts:
Code:
  1.  
  2.   var SleepTime: Double;
  3.  
  4.   if MaxFPS > 0 then
  5.     begin
  6.       SleepTime := 1000/MaxFPS - DrawTime;
  7.       if SleepTime > 0 then Sleep(Trunc(SleepTime));
  8.     end
  9.   else SleepTime := 0;


und so gehts nich?!:

Code:
  1.  
  2.   var SleepTime: Cardinal;
  3.  
  4.   if MaxFPS > 0 then
  5.     begin
  6.       SleepTime := round(1000/MaxFPS) - DrawTime;
  7.       if SleepTime > 0 then Sleep(SleepTime);
  8.     end
  9.   else SleepTime := 0;


Naja ega, jetzt gehts ja xD
DANKE!

MfG Bergmann.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 15 Queries | GZIP : On ]