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
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Programm { Starte Thread "Spielelogik" Starte Thread "Rendering" } Thread "Spielelogik" { Zeit0 = Momentane Zeit Hole Exklusivzugriff auf Spielelogik Aktualisiere Spielelogik Gebe Exklusivzugriff auf Zeit1 = Momentane Zeit Warte 1 / ZielFPS - ( Zeit1 - Zeit0 ) } Thread "Rendering" { Hole Exklusivzugriff auf Spielelogik Rendere Gebe Exklusivzugriff auf } |
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
while(!og_g_bQuit) { ogTimer Timer; Timer.Start(); fTime = og_g_Clock.GetPredictedFrameTime(); //Nachrich empfangen while(PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) { //Übersetzt eine Nachricht ::TranslateMessage(&message); //Leitet die Nachricht an die richtige Fensterprozedur weiter ::DispatchMessage(&message); } //Nur wenn das Fenster aktiv ist, sonst PAUSE if(og_g_bActivate) { //Timebased-Rendering if(fFixedFrameRate <= 0.f) { //Rendern und dann Move Funktion if(Render(fTime) == OG_STOP) og_g_bQuit = true; if(Move(fTime) == OG_STOP) og_g_bQuit = true; //Bildbuffer sichtbar machen ogDirect3D::Instance().Present(); } //Framebased-Rendering else { //Alles neu rendern? bool bShowScene = false; if(bRender) { if(Render(fFramePeriod) == OG_STOP) og_g_bQuit = true; bRender = false; bShowScene = true; } while(fTotalPassedTime >= fFramePeriod) { //Move-Funktion aufrufen if(Move(fFramePeriod) == OG_STOP) og_g_bQuit = true; fTotalPassedTime -= fFramePeriod; bRender = true; } fTotalPassedTime += fTime; if(fTotalPassedTime > fMaxTime) fTotalPassedTime = fMaxTime; //Present, wenn es änderungen gibt! if(bShowScene) ogDirect3D::Instance().Present(); } //Aufgeschobene 3D-Soundänderungen durchführen, falls 3D-Sound initialisiert wurde if(og_g_bDirectSoundInit) { if(ogDirectSound::Instance().GetListener()) { ogDirectSound::Instance().GetListener()->CommitDeferredSettings(); } } } } |
Anonymous
unregistriert
Anonymous
unregistriert
Zitat von »"fkrauthan"«
TomasRiker hat da in seinem Code ein wie ich finde ganz geniales Konzept mom *link rauskram* https://projects.fslab.de/projects/Rollmorad/browser/trunk/src/application.cpp
ab Zeile: 160
Zitat von »"drakon"«
Also ich bekomme bei dem Link nur einen Fehler, wegen Sicherheitszertifikat. Wenn ich überhaupt mal draufkomme. :roll:
Werbeanzeige