Perfektes Timing

Posted By: Yamm

Perfektes Timing - 10/01/14 07:14

Derzeit arbeite ich an einer kleinen Demo-Engine. Dabei ist es wichtig, dass Ereignisse in Echtzeit zu festgelegten Zeitpunkten gestartet und beendet werden, wie etwa ein bestimmtes Bild oder einen Text anzeigen.

Momentan versuche ich alles mit einer while zu steuern. Dabei zähle ich die Variable "time" hoch, damit es auf allen PCs gleich ist, mit time_step.

Code:
time += 4 * time_step;



Zumindest für die ersten Sekunden gilt die Formel:

Timer = Seconds * 32 + 32

Allerdings stimmt dies mit fortschreiten der Zeit nicht mehr. Mache ich grundsätzlich etwas falsch? Hat dazu jemand gute Tipps?
Posted By: Superku

Re: Perfektes Timing - 10/01/14 07:32

Warum schreibst du nicht einfach
time += time_step;
und multiplizierst das stattdessen mit 4? Die zugrundeliegende Zeiteinheit der Engine sind ja bekanntlich Ticks, und 16 Ticks sind eine Sekunde, sprich
time += time_step;
erreicht in einer Sekunde, von 0 ausgehend, den Wert 16. Demnach
Sekunden = time/16.0; // Minuten und ähnliches lassen sich natürlich nun leicht aus den Sekunden bestimmen

Da time_step aber gewissen Schwankungen (bzw. eben gerade nicht) und Glättung unterliegt, um unterschiedliche Frameraten auszugleichen, solltest du eher zu time_frame anstatt time_step greifen - aber nicht immer, sondern nur da, wo du wirklich Zeit zählen/ aufsummieren musst!
Posted By: Yamm

Re: Perfektes Timing - 10/01/14 07:47

hm... irgendwie komme ich damit immer noch nicht klar. Wenn ich beispielsweise time += time_frame; mache, scheint der Wert immer unter 22 zu liegen, es wird nichts addiert. frown
Posted By: Superku

Re: Perfektes Timing - 10/01/14 07:59

Ein Beispiel:

Code:
///////////////////////////////
#include <acknex.h>
#include <default.c>
///////////////////////////////

var time = 0;
var seconds = 0;
var minutes = 0;

void main()
{
	fps_max = 60;
	while(1)
	{
		time += time_frame;
		seconds = time/16.0;
		minutes = floor(seconds/60.0);
		seconds %= 60;
		draw_text(str_printf(NULL,"Game running for %d minutes and %d seconds.",(int)minutes,(int)seconds),20,20,COLOR_RED);
		wait(1);
	}
}

Posted By: Yamm

Re: Perfektes Timing - 10/01/14 08:23

Danke! Mein Problem war anscheinend, dass ich statt var time int time gemacht habe frown
© 2024 lite-C Forums