我在游戏中有一个简单的计时器类,旨在让我能够让实体每隔几秒钟做一件事。它有两个功能:C++在一个类的多个实例之间共享定时器计数器的问题
void Timer::GameTimer() // Gets time between frames
{
::ElapsedTime = Clock.GetElapsedTime();
Clock.Reset();
}
这只是更新了ElapsedTime Global,以便它可以被任何需要的东西抓住。它放在gameloop里面。
那么重要的一个:
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;
}
}
定时器是实体类中实例化定时器::定时器定时
的功能,然后调用内部实体::更新每循环一次的每个实例在游戏中的实体类:
if (timer.tCounter(2))
{
Do stuff
}
问题是,它似乎并没有独特的计数实体的每个实例,导致只有一个做的东西的时间和其他奇怪的事情偶尔会发生。这个问题似乎是被共享的静态变量。我如何确保这个tCounter函数为每个调用它的实例保存唯一变量?
“问题似乎是共享的静态变量”:你说得对。在积极的方面,它看起来像``ElapsedTime`作为`Timer`类的成员变量,所以只需遵循该逻辑即可。另一方面,它看起来像你有更大和更基本的问题... – 2011-01-10 19:27:27