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
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 |
//while(true): MessageLoop ogTimer Timer; Timer.Start(); //Startzeit messen if(fFixedFrameRate > 0.f) fTime = fFramePeriod; else fTime = og_g_Clock.GetPredictedFrameTime(); //Hier werden die WM verarbeitet sowie die Render und Move funktion aufgerufen //Bildbuffer sichtbar machen ogDirect3D::Instance().Present(); //Fixe Framerate einstellen? Timer.Stop(); float fTimeForThisFrame = Timer.GetDuration<float>(); if(fFixedFrameRate > 0.f && fFramePeriod > fTimeForThisFrame) { ::Sleep(static_cast<DWORD>((fFramePeriod - fTimeForThisFrame) * 1000.f)); } |
Administrator
Zitat von »"David_pb"«
Wenn ich sowas seh'. Welcher (sorry) Trottel versucht denn Frames zu verschenken? Das machen Anfänger und Leute die keine Ahnung haben. Framebremsen haben nichts im Quellcode verloren!
Vielmehr solltest du die Bewegung der Objekte in Abhängigkeit der Frames bringen und nicht versuchen selbige auf eine fixe Zahl runterzuschrauben.
Zitat von »"David Scherfgen"«
Zitat von »"David_pb"«
Wenn ich sowas seh'. Welcher (sorry) Trottel versucht denn Frames zu verschenken? Das machen Anfänger und Leute die keine Ahnung haben. Framebremsen haben nichts im Quellcode verloren!
Vielmehr solltest du die Bewegung der Objekte in Abhängigkeit der Frames bringen und nicht versuchen selbige auf eine fixe Zahl runterzuschrauben.
Geht's noch?
Angenommen mein Spiel macht nur 25 Logik-Updates pro Sekunde, also 40 ms pro Update, und ich bin schon nach 5 ms mit meinem Update fertig und habe auch schon mein Frame gerendert - dann kann ich die restlichen 35 ms anderen Programmen zur Verfügung stellen, indem ich meine CPU-Zeit z.B. durch Sleep so lange abtrete. Da man nie genau wissen kann, ob man wirklich genau nach der gewünschten Zeit wieder an die Reihe kommt, sollte man lieber etwas weniger Zeit abwarten, z.B. 25 ms statt die eigentlichen 35 ms.
Am sichersten ist es wohl, wenn man einfach ein Sleep(0) macht und bei der Rückkehr wieder prüft, ob es mittlerweile Zeit für ein neues Logik-Update ist. Falls nicht, dann wieder Sleep(0), so lange, bis genug Zeit vergangen ist.
Öfter zu rendern als Updates zu machen bringt nur dann was, wenn ich irgendwelche Komponenten habe, die nur von der reinen physikalischen Zeit abhängen und nicht von der Logik-Zeit, oder wenn ich zwischen zwei Logik-Zuständen interpolieren will.
Also halt dich mal zurück mit solchen erniedrigenden Kommentaren.
Administrator
Zitat von »"David_pb"«
Man bremst Frames nicht aus! Man sollte lieber einen Faktor ermitteln anhand dessen sich die Objekte bewegen.
Zitat von »"David_pb"«
Läuft das Programm im Vollbildmodus (davon geh ich hier mal aus) dann bekommt es sowiso höchste Priorität.
Werbeanzeige