c ++在类的多个实例之间共享定时器计数器的问题

时间:2011-01-10 18:41:02

标签: c++

我在游戏中有一个简单的计时器类,旨在让我让一个实体每隔几秒就做一些事情。它有两个功能:

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函数为每个调用它的实例保存唯一变量?

1 个答案:

答案 0 :(得分:0)

static在此上下文中表示一次只存在一个事物的实例并初始化一次。

最容易解决的问题是(不一定是最好的修复):     - 删除静态限定符     - 制作ftime成员nTimer成员变量     - 为要对计时器做出反应的每个实体创建Timer的实例。