我在游戏中有一个简单的计时器类,旨在让我让一个实体每隔几秒就做一些事情。它有两个功能:
void Timer::GameTimer() // Gets time between frames
{
::ElapsedTime = Clock.GetElapsedTime();
Clock.Reset();
}
这只是更新了ElapsedTime Global,以便任何需要它的东西都能抓住它。它被放置在游戏圈内。
然后是重要的一个:
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在Entity类中实例化为Timer :: Timer timer
然后,对于游戏中实体类的每个实例,每个循环在Entity :: Update内调用一次该函数:
if (timer.tCounter(2))
{
Do stuff
}
问题是它似乎并不是每个Entity实例唯一计数,导致一次只有一个做东西,偶尔会发生其他奇怪的事情。问题似乎是共享的静态变量。如何确保此tCounter函数为每个调用它的实例保存唯一变量?
答案 0 :(得分:0)
static在此上下文中表示一次只存在一个事物的实例并初始化一次。
最容易解决的问题是(不一定是最好的修复):
- 删除静态限定符
- 制作ftime
成员n
和Timer
成员变量
- 为要对计时器做出反应的每个实体创建Timer
的实例。