Gameloop timing

posi90

Erfahrenes Mitglied
Hallo,

Ich würde gerne eure Meinung über eine Spieleschleife bezüglich timing lesen.

Und zwar sieht meine Schleife folgendermaßen aus:
C++:
int main(int argc, char **argv)
{
	gameengine game(argc, argv);
	while (game.IsRunning())
	{
		game.Update();
		game.limitFPS(60);
		game.Draw();
	}
	game.Cleanup();
	return 0;
}

Die Methode limitFPS() verhindert eine CPU Auslastung von 100%, jedoch hat das zur Folge, dass die Methode Update auch nur alle 16ms aufgerufen wird.

Mal angenommen man will seine Reaktionszeit testen, dann kann hier nur ein vielfaches von 16ms herauskommen.
Meine Reaktionszeit liegt bei ~210ms.

Findet ihr das unfair, wenn 2 Personen auf verschiedenen PCs ihre Reaktionszeit messen wollen?

Grüße Poseidon
 
Zuletzt bearbeitet von einem Moderator:
Hallo posi90,

Hierzu zwei Punkte (vor allem der zweite ist wichtig):

1. Wenn für dich 16 Millisekunde "brach liegen" eine zu grosse Zeit ist, dann solltest du dir überlegen, ob du den Input ggf. komplett vom UI-Thread entkoppeln willst und in einem eigenen Thread eine eigene I/O-Verarbeitung zu machen. Da bist du dann natürlich wieder flexibler und kannst weiter nach unten oder oben gehen.

2. Mit "seine Reaktionszeit" denke ich meinst du echt die physikalische Reaktionszeit des Benutzers? Hier hast du eine absolute Minimalgrenze der mentalen Reaktionszeit von 0.2 Sekunden. Vorausgesetzt der Benutzer muss keinen Blickwechsel machen. Aber nach den 0.2 Sekunden beginnt der Körper erst zu reagieren. Das heisst unter 300-500 Millisekunden wirst du selten was haben (wenn du sauber deine Zeit misst). Von daher glaube ich kaum, dass ein Benutzer sagen wird: "Hey, das waren niemals 572 Millisekunden, das waren maximal 560 Millisekunden!" (Vergleiche hierzu die Human Response Time die bei ca 100 Millisekunden liegt).

Grüsse
Cromon

PS:
Human Response Time bezeichnet die Zeitspanne, die ein Benutzer in einem Computernetzwerk nicht als Verzögerung wahrnimmt und ist eben bei vermuteten 100ms
 
Zurück