Ik ben begonnen aan een Dungeon Keeper-achtig spel gemaakt in SDL i.c.m. OpenGL, en ik probeer nu te bepalen welke van de twee onderstaande methodes het beste is om de scenes te renderen:
1) Er is geen maximum voor frames per seconde; van elke frame wordt het verschil in tijd gemeten. Een voordeel hiervan is dat je heel makkelijk bewegingen kunt programmeren:
nieuwe plaats object = snelheid (m/s) * frametime (s) * global multiplier
De nadelen zijn dat je geen consistente framerate hebt (kan wel oplopen tot 200 frames per seconde en dalen tot 20 fps) en dat je altijd 100% CPU usage hebt als het spel draait.
2) Er wordt een fixed maximum framerate ingesteld (bijvoorbeeld de refresh rate van de monitor). Deze wordt bijgehouden door het programma te laten pauzeren met de sleep-functies die aanwezig zijn in SDL:
pauzetijd = (1 / verwacht aantal frames per seconde) - rendertijd laatste frame - denktijd laatste frame
Voordeel hiervan is dat je de CPU minimaal gebruikt (het spel slaapt immers veel) maar de nadelen hiervan zijn dat het nogal onnauwkeurig kan zijn (ligt aan de sleepfuncties, hier is natuurlijk een limiet) en imho moeilijker goed te implementeren is.
Wat zou ik volgens jullie moeten doen? Andere (betere) methodes zijn natuurlijk welkom
1) Er is geen maximum voor frames per seconde; van elke frame wordt het verschil in tijd gemeten. Een voordeel hiervan is dat je heel makkelijk bewegingen kunt programmeren:
nieuwe plaats object = snelheid (m/s) * frametime (s) * global multiplier
De nadelen zijn dat je geen consistente framerate hebt (kan wel oplopen tot 200 frames per seconde en dalen tot 20 fps) en dat je altijd 100% CPU usage hebt als het spel draait.
2) Er wordt een fixed maximum framerate ingesteld (bijvoorbeeld de refresh rate van de monitor). Deze wordt bijgehouden door het programma te laten pauzeren met de sleep-functies die aanwezig zijn in SDL:
pauzetijd = (1 / verwacht aantal frames per seconde) - rendertijd laatste frame - denktijd laatste frame
Voordeel hiervan is dat je de CPU minimaal gebruikt (het spel slaapt immers veel) maar de nadelen hiervan zijn dat het nogal onnauwkeurig kan zijn (ligt aan de sleepfuncties, hier is natuurlijk een limiet) en imho moeilijker goed te implementeren is.
Wat zou ik volgens jullie moeten doen? Andere (betere) methodes zijn natuurlijk welkom