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

TSS

Frischling

  • »TSS« ist der Autor dieses Themas
  • Private Nachricht senden

1

27.05.2010, 22:38

Framerate begrenzen bei kleinem SFML-Spiel

Hallo Leute,
ich habe folgendes Problem und komm nicht wirklich weiter. Ich hab ein kleines Spiel mit SFML programmiert. Klappt auch alles ganz gut, nur ist die Framerate nicht begrenzt und die CPU-Auslastung geht damit auf 100% hoch. Ich wollte die Framerate jetzt mit

C-/C++-Quelltext

1
App.SetFramerateLimit(60);

limitieren.
Das ist aber ziemlich ungünstig für meine Kollisionserkennung. Der Ball bewegt sich mit 750 Pixeln pro Sekunde, macht also bei limitierter Framerate 12.5 Pixel pro Durchlauf. Dafür müsste ich meine komplette Kollsionserkennung umstellen.
Also habe ich mir gedacht, ich limitiere die Framerate z.B. auf 600 Frames/Sekunde (das Programm hat keine großen Berechnungen, schafft bei mir im Moment 5000) aber zeichne nur 60 mal pro Sekunde. Leider führt das immer noch zu Rucklern und ist auch nicht gerade die sauberste Lösung.
Habt ihr vielleicht Anregungen für mich wie ich es schaffe das Programm etwas auszubremsen, ohne dass die Kollisionserkennung dran glauben muss?

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

27.05.2010, 22:49

ein thread zu dem thema
sollte das nicht weiter helfen. nochmal bescheid sagen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

TSS

Frischling

  • »TSS« ist der Autor dieses Themas
  • Private Nachricht senden

3

27.05.2010, 23:45

Naja, in dem Thread ist das Problem ja eher, dass die Framerate aufgrund der Berechnungen runter geht. Nur ich würde meine gerne auf ein vernünftiges Niveau begrenzen, weil das Programm sonst natürlich mit Vollstoff läuft (CPU komplett aufgelastet, dafür aber so 5000 Fps). Für die Anzeige reichen ja 60-100 Fps locker, nur ich müsste es irgendwie schaffen die Berechnungen öfter durchzuführen (da die Kollisionserkennung mehr oder weniger Pixelgenau ist). Ich habe zwar ein paar Dinge ausprobiert (z.B. Framerate auf 600 aber nur alle 10 Frames rendern), aber das klappt zum einen nicht richtig und zum anderen ist es einfach extrem unsauber.

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

4

28.05.2010, 00:05

Du kannst nie garentieren, dass die Framerate über einem bestimmten Wert bleibt, also arbeite lieber an der Stabilität deiner Kollisionsbehandlung.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

5

28.05.2010, 11:52

lies dir doch mal den thread durch. du kannst entweder kleinere schritte machen oder einen strahlentest implementieren.
was ist so schlimm an voller cpu auslastung? es sollte reichen wenn man jedes frame ganz kurz schläft.(sf::sleep(0.001f);)
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

little_Progger

Treue Seele

Beiträge: 188

Wohnort: Nähe Bielefeld

Beruf: Azubi

  • Private Nachricht senden

6

28.05.2010, 13:08

Ich kann das mit der Framerate gut nachvollziehen denn, wenn ich auf meinem PC zum Beispiel CSS ohne FPS Begrenzung spiele, muss sich nur ein kleiner neuer Prozess oder sonst was (z.B. Lied vorbei und der Player schaltet auf das nächste um...)
und MEIN PC kommt total ausm Takt und das gesamte Spiel laggt sich nur noch so einen weg.

Und mit FPS Begrenzung kann man den PC ja auf einem Stabilerem Niveau halten.

Ansonsten bei kleineren Spielen sollte das doch eig. kein großes Problem sein oder?

TSS

Frischling

  • »TSS« ist der Autor dieses Themas
  • Private Nachricht senden

7

28.05.2010, 13:30

In jedem Frame kurz zu pausieren hat erstmal die CPU-Auslastung deutlich gesenkt, ohne dass das Spiel ruckelt.
Ich werde demnächst dann auf jeden Fall die Kollisionserkennung mal überarbeiten, mein Ziel wäre eben, dass man die Framerate auf 60 begrenzen kann und trotzdem alles ohne Probleme läuft.

8

28.05.2010, 13:56

600 FPS sind totaler Blödsinn. Entweder du lässt deinen Ball langsamer fliegen oder du musst halt überprüfen, ob es zwischen der alten und der neuen Position zu einer Kollision kam. Wenn du weißt wo, kannst du dann auch den Ball dorthin zurück setzen. Der Trick mit dem Sleep funktioniert zwar, aber dafür geht auch die Framerate ordentlich in den Keller. Wüsste auch nicht warum man bei einem Spiel auf die CPU Last achten sollte.
Ich weiß es dauert viel zu lange, aber ich habe echt nur Pech. Habe mir heute mal eben im Zeigefinger Nerv und Sehne durchtrennt. Dennoch kann es nicht mehr all zu lange dauern mit dem Tutorial. Außerdem kamen auch noch Prüfungen und dergleichen dazwischen.
Klatscht die Hopper an die Wand, Deutschland ist ein Raverland! :D

Werbeanzeige