Aktuelle Zeit: 23.12.2024, 05:22

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: max. FPS (Frames Per Seconds)
BeitragVerfasst: 25.06.2007, 15:39 
Offline
Benutzeravatar

Registriert: 21.04.2007, 20:54
Beiträge: 117
Hallo Leute,

kann mir bitte mal jemand einen Link oder ein kleines Beispiel zeigen, wie man mit Irrlicht die max. FPS (Frames Per Seconds) angeben kann sodass meine Programme auf allen Rechnern gleich schnell laufen?!

Ich hab sowas schon mal in einer anderen Grafikbibliothek gesehen also dürfte das ja eigentlich nicht so viel Code sein :wink:

_________________
Meine Homepage: http://www.hlc-games.de/
Mein Projekt: http://softpixelengine.sourceforge.net/
Mein Forum: http://www.hlc-games.de/forum/


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: max. FPS (Frames Per Seconds)
BeitragVerfasst: 25.06.2007, 15:45 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Mach doch selber...
Einfach die Zeit messen, die für einen Frame benötigt wird, und dann solange warten, bis eine bestimmte Zeit erreicht wurde, ist dann evtl nicht 100% genau, aber einfach zu implementieren.

In Irrlicht habe ich das noch nicht gesehen.

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: max. FPS (Frames Per Seconds)
BeitragVerfasst: 25.06.2007, 15:54 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
oder lass es einfach ganz und mach deine animationen zeit-abhängig und nicht frameabhängig

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: max. FPS (Frames Per Seconds)
BeitragVerfasst: 25.06.2007, 18:36 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Ich denke, je nach Anwendung ist es evtl sinnvoll, die Frames zu reduzieren. Zum Beispiel bei einem Strategiespiel merkt man ab 50 Frames/s aufwärts eh keinen Unterschied mehr, wenn das Spiel jetzt nicht so viel CPU-Leistung verwendet, ist es theoretisch möglich, im Hintergrund andere Programme laufen zu lassen (Updates oder ähnliches), ohne dass man im Spiel Nachteile dadurch erhält.

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: max. FPS (Frames Per Seconds)
BeitragVerfasst: 26.06.2007, 09:16 
Offline
Benutzeravatar

Registriert: 21.04.2007, 20:54
Beiträge: 117
@thephoenix: Ich wüsste schon wie ich das machen könnte aber wie du schon selber gesagt hast ist das nicht sehr genau.

@Sylence: gute Idee, hab ich auch beim Laufen meiner Figur gemacht, bloß beim Springen ist das sehr unpraktisch weil das dann mit Zeitabständen aussieht als würde es ruckeln.

Ich sollte vielleicht noch kurz was erwähnen:
ich schreibe ein 2D-Jump-and-Run Spiel.

Gibt es vielleicht eine Möglichkeit das über die 'Win32API' bzw. die 'LinuxAPI' zu machen?
Müsste dann halt noch zusätzlich abfragen: "#ifdef WIN32 ..."

Gruß LukasBanana

_________________
Meine Homepage: http://www.hlc-games.de/
Mein Projekt: http://softpixelengine.sourceforge.net/
Mein Forum: http://www.hlc-games.de/forum/


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: max. FPS (Frames Per Seconds)
BeitragVerfasst: 26.06.2007, 09:38 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Zitat:
@thephoenix: Ich wüsste schon wie ich das machen könnte aber wie du schon selber gesagt hast ist das nicht sehr genau.

Wieviel Genauigkeit benötigst du denn? Das sollte auf jeden Fall ausreichen, ich denke, wenn die Frames zwischen 75 und 70 fps schwanken, merkt das der Benutzer nicht.

EDIT: Ich bin mir sicher, die OS-APIs bieten auch nicht mehr, als Funktionen zum Warten und Zeit Messen.

EDIT2: Wenn du die Begrenzung nur benötigst, um dein Animationssystem zu retten, wäre Sylences Methode immer die richtige, wenn sie gescheit implementiert wurde, wenn du allerdings 100% Prozessorauslastung in Kauf nimmst, kannst du auch den Framebegrenzer genauer bekommen, indem du die ganze Zeit/nur die letzten Millisekundenbruchteile jeden Frame statt per sleep etc mit einer Schleife wartest.

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: max. FPS (Frames Per Seconds)
BeitragVerfasst: 26.06.2007, 10:25 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Diesen Code habe ich gerade mal in mein Spiel reingehackt, ist halt so oder so eine Quick&Dirty-Lösung weswegen ich an deiner Stelle als nächstes gescheite zeitunabhängige Anmationen implementieren würde (das MUSS gehen, und schwierig isses auch nicht):

Code:
//Plattformkompatibilität
#if defined(_MSC_VER) || defined(_WINDOWS_)
   #include <time.h>
   #if !defined(_WINSOCK2API_) && !defined(_WINSOCKAPI_)
         struct timeval
         {
            long tv_sec;
            long tv_usec;
         };
   #endif
#else
   #include <sys/time.h>
#endif
#if defined(_MSC_VER) || defined(_WINDOWS_)
   int gettimeofday(struct timeval* tv, void *timezone)
   {
      union {
         long long ns100;
         FILETIME ft;
      } now;
     
      GetSystemTimeAsFileTime (&now.ft);
      tv->tv_usec = (long) ((now.ns100 / 10LL) % 1000000LL);
      tv->tv_sec = (long) ((now.ns100 - 116444736000000000LL) / 10000000LL);
     return (0);
   }
#endif

[...]
//Initialisierung des Spiels
timeval lastframe;
gettimeofday(&lastframe, 0);
maxfps = 100;

[...]
//Hauptschleife o.ä.
if (maxfps)
{
   timeval currtime;
   for(;;)
   {
      gettimeofday(&currtime, 0);
      int difference = currtime.tv_usec - lastframe.tv_usec;
      if (difference < 0) difference += 1000000;
      if ((float)difference > (float)1000000 / maxfps) break;
   }
}
gettimeofday(&lastframe, 0);

Der Code läuft bei mir bis auf 1% Abweichung genau, ich habe ihn nur unter Linux ausgetestet.
Da der Code so nichts anderes macht, als CPU-Zeit zu verpulvern, werde ich ihn auch sofort wieder aus meinem Spiel rausschmeißen, war mehr so ein PoC, dass ein einigermaßen genauer Framelimiter möglich ist... ;)
Aber evtl reicht das ja für deine Zwecke...

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: max. FPS (Frames Per Seconds)
BeitragVerfasst: 26.06.2007, 13:41 
Offline
Benutzeravatar

Registriert: 21.04.2007, 20:54
Beiträge: 117
OK, danke! Ich werd mal sowas ausprobieren! :D

Gruß LukasBanana

_________________
Meine Homepage: http://www.hlc-games.de/
Mein Projekt: http://softpixelengine.sourceforge.net/
Mein Forum: http://www.hlc-games.de/forum/


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: max. FPS (Frames Per Seconds)
BeitragVerfasst: 03.07.2007, 14:39 
Offline
Benutzeravatar

Registriert: 21.04.2007, 20:54
Beiträge: 117
Ich hab eine recht gute Lösung hin bekommen ... und ich muss sagen jetzt bin ich doch wieder sehr zufrieden mit C++ und Irrlicht :mrgreen:
Normaler Weise haben Spiele, egal ob 2D oder 3D, ca. 70-120 FPS. Meines hatte bisher immer 1000 FPS! :lol:
Ich habs jetzt auf 120 runtergedreht, hab die '#defines SPEED' usw. angepasst und jetzt läuft es einwandfrei auf allen Rechnern gleich schnell. :D

_________________
Meine Homepage: http://www.hlc-games.de/
Mein Projekt: http://softpixelengine.sourceforge.net/
Mein Forum: http://www.hlc-games.de/forum/


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


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