Ich habe eine einfache Timer-Klasse in einem Spiel, die es mir ermöglichen soll, eine Entity so viele Sekunden lang etwas machen zu lassen. Es hat zwei Funktionen:C++ Problem mit dem Timer-Zähler, der zwischen mehreren Instanzen einer Klasse geteilt wird
void Timer::GameTimer() // Gets time between frames
{
::ElapsedTime = Clock.GetElapsedTime();
Clock.Reset();
}
Dies aktualisiert nur die ElapsedTime Global, so dass es von allem ergriffen werden kann, die es benötigt. Es ist in der Gameloop platziert.
Dann das wichtig:
bool Timer::tCounter(int total) // Returns true every 'total' seconds
{
static float ftime; // Variable to hold the mounting elapsed time
static int n; // Counter variable for true trigger
ftime += ElapsedTime;
int itime = (int)ftime; //Truncate
if(!(itime%total) && itime != 0)
{
n++;
}
else
{
n = 0;
}
if (n == 1)
{
return true;
}
else
{
return false;
}
}
Timer ist in der Entity-Klasse instanziiert als Timer :: Timer Timer
Die Funktion dann in Entity aufgerufen :: Update einmal pro Schleife für jede Instanz die Entity-Klasse im Spiel:
if (timer.tCounter(2))
{
Do stuff
}
das Problem ist es nicht eindeutig für jede Instanz von Entity zu zählen scheint, zu einer Zeit, in nur eine tun Sachen resultierenden und manchmal passieren andere seltsame Dinge. Das Problem scheint, dass die statischen Variablen geteilt werden. Wie stelle ich sicher, dass diese tCounter-Funktion eindeutige Variablen für jede Instanz enthält, die sie aufruft?
"Das Problem scheint zu sein, die statischen Variablen zu teilen": Sie haben das richtig verstanden. Auf der positiven Seite sieht es so aus, als ob Sie 'ElapsedTime' als Member-Variable für die' Timer'-Klasse haben. Folgen Sie einfach dieser Logik. Auf der anderen Seite sieht es so aus, als ob Sie größere und einfachere Probleme haben ... –